feat(auth): 调整登录接口入参、手机号接口的响应格式
This commit is contained in:
@@ -43,7 +43,7 @@ async def get_wechat_phone(
|
|||||||
result = await wechat_api.get_phone_number(code)
|
result = await wechat_api.get_phone_number(code)
|
||||||
except WechatApiError:
|
except WechatApiError:
|
||||||
raise HTTPException(status.HTTP_401_UNAUTHORIZED, detail='Invalid code')
|
raise HTTPException(status.HTTP_401_UNAUTHORIZED, detail='Invalid code')
|
||||||
return {'data': {'phone': jsonpath(result, '$.phone_info.phoneNumber')}}
|
return {'data': {'phone': jsonpath(result, '$.phone_info.phoneNumber', first=True)}}
|
||||||
|
|
||||||
|
|
||||||
@auth_router.post(
|
@auth_router.post(
|
||||||
@@ -81,30 +81,22 @@ async def wechat_login(
|
|||||||
return {'status': 4001, 'message': '首次登录需要用户授权信息'}
|
return {'status': 4001, 'message': '首次登录需要用户授权信息'}
|
||||||
|
|
||||||
if all([
|
if all([
|
||||||
# payload.phone,
|
payload.phone,
|
||||||
payload.encrypted_data,
|
payload.nickname,
|
||||||
payload.iv,
|
payload.avatar_url,
|
||||||
]) is False:
|
]) is False:
|
||||||
raise HTTPException(status.HTTP_400_BAD_REQUEST, detail='请重试登录操作')
|
raise HTTPException(status.HTTP_400_BAD_REQUEST, detail='请重试登录操作')
|
||||||
|
|
||||||
# 注册用户
|
# 注册用户
|
||||||
session_key = wechat_session.get('session_key')
|
|
||||||
union_id = wechat_session.get('union_id')
|
union_id = wechat_session.get('union_id')
|
||||||
try:
|
|
||||||
profile = decrypt_sensitive_data(session_key, payload.encrypted_data, payload.iv)
|
|
||||||
except (ValueError, TypeError) as e:
|
|
||||||
logger.exception(f"[wechat_login] Exception, User information decryption failed, detail: {e}")
|
|
||||||
raise HTTPException(status.HTTP_400_BAD_REQUEST, detail='请重试登录操作')
|
|
||||||
|
|
||||||
logger.info(f"decrypt plaintext: {wechat_session}")
|
|
||||||
user: User | bool = await db_crud.create(
|
user: User | bool = await db_crud.create(
|
||||||
data={
|
data={
|
||||||
'nickname': profile.get('nickName'),
|
'nickname': payload.nickname,
|
||||||
'gender': profile.get('gender'),
|
'gender': None,
|
||||||
'wechat_openid': openid,
|
'wechat_openid': openid,
|
||||||
'wechat_union_id': union_id,
|
'wechat_union_id': union_id,
|
||||||
'phone': payload.phone,
|
'phone': payload.phone,
|
||||||
'avatar_url': profile.get('avatarUrl')
|
'avatar_url': payload.avatar_url
|
||||||
},
|
},
|
||||||
filters={'wechat_openid': openid}
|
filters={'wechat_openid': openid}
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -12,8 +12,8 @@ from pydantic import BaseModel, constr
|
|||||||
class WechatLoginIn(BaseModel):
|
class WechatLoginIn(BaseModel):
|
||||||
code: str
|
code: str
|
||||||
phone: Optional[constr(pattern='^1[0-9]{10}$')] = None
|
phone: Optional[constr(pattern='^1[0-9]{10}$')] = None
|
||||||
encrypted_data: Optional[str] = None
|
nickname: Optional[constr(max_length=20)] = None
|
||||||
iv: Optional[str] = None
|
avatar_url: Optional[constr(pattern='^http[a-zA-Z0-9:/\.]+')] = None
|
||||||
|
|
||||||
|
|
||||||
class Token(BaseModel):
|
class Token(BaseModel):
|
||||||
|
|||||||
Reference in New Issue
Block a user