feat(auth): 调整登录接口入参、手机号接口的响应格式

This commit is contained in:
xingc
2025-04-21 20:52:18 +08:00
parent 9fff9cdf39
commit f4c2412932
2 changed files with 9 additions and 17 deletions

View File

@@ -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}
) )

View File

@@ -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):