From f4c241293202e2e73816258ec0bd80037adcab60 Mon Sep 17 00:00:00 2001 From: xingc Date: Mon, 21 Apr 2025 20:52:18 +0800 Subject: [PATCH] =?UTF-8?q?feat(auth):=20=E8=B0=83=E6=95=B4=E7=99=BB?= =?UTF-8?q?=E5=BD=95=E6=8E=A5=E5=8F=A3=E5=85=A5=E5=8F=82=E3=80=81=E6=89=8B?= =?UTF-8?q?=E6=9C=BA=E5=8F=B7=E6=8E=A5=E5=8F=A3=E7=9A=84=E5=93=8D=E5=BA=94?= =?UTF-8?q?=E6=A0=BC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/routers/auth/routes.py | 22 +++++++--------------- core/routers/auth/schema.py | 4 ++-- 2 files changed, 9 insertions(+), 17 deletions(-) diff --git a/core/routers/auth/routes.py b/core/routers/auth/routes.py index 5281052..9686072 100644 --- a/core/routers/auth/routes.py +++ b/core/routers/auth/routes.py @@ -43,7 +43,7 @@ async def get_wechat_phone( result = await wechat_api.get_phone_number(code) except WechatApiError: 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( @@ -81,30 +81,22 @@ async def wechat_login( return {'status': 4001, 'message': '首次登录需要用户授权信息'} if all([ - # payload.phone, - payload.encrypted_data, - payload.iv, + payload.phone, + payload.nickname, + payload.avatar_url, ]) is False: raise HTTPException(status.HTTP_400_BAD_REQUEST, detail='请重试登录操作') # 注册用户 - session_key = wechat_session.get('session_key') 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( data={ - 'nickname': profile.get('nickName'), - 'gender': profile.get('gender'), + 'nickname': payload.nickname, + 'gender': None, 'wechat_openid': openid, 'wechat_union_id': union_id, 'phone': payload.phone, - 'avatar_url': profile.get('avatarUrl') + 'avatar_url': payload.avatar_url }, filters={'wechat_openid': openid} ) diff --git a/core/routers/auth/schema.py b/core/routers/auth/schema.py index 7e040cd..54cae9b 100644 --- a/core/routers/auth/schema.py +++ b/core/routers/auth/schema.py @@ -12,8 +12,8 @@ from pydantic import BaseModel, constr class WechatLoginIn(BaseModel): code: str phone: Optional[constr(pattern='^1[0-9]{10}$')] = None - encrypted_data: Optional[str] = None - iv: Optional[str] = None + nickname: Optional[constr(max_length=20)] = None + avatar_url: Optional[constr(pattern='^http[a-zA-Z0-9:/\.]+')] = None class Token(BaseModel):