From 2bac67fb3cfa0de7e03955459d4370445d863a46 Mon Sep 17 00:00:00 2001 From: Pine Date: Wed, 26 Aug 2026 12:55:05 +0800 Subject: [PATCH] =?UTF-8?q?fix(auth):=20=E8=B4=A6=E5=8F=B7ID/=E7=99=BB?= =?UTF-8?q?=E5=BD=95=E5=90=8D/=E6=98=B5=E7=A7=B0/=E5=BE=AE=E4=BF=A1?= =?UTF-8?q?=E8=BA=AB=E4=BB=BD=E5=BD=BB=E5=BA=95=E7=8B=AC=E7=AB=8B,=20?= =?UTF-8?q?=E4=B8=8D=E5=86=8D=E4=BA=92=E7=9B=B8=E5=BD=B1=E5=93=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - username 登录名独立生成: 微信用户 wx_、手机号用户 u_ —— 不再 = openid / 手机号 - 手机号登录只按 phone 列查找(find_by_phone), 删除用 username 兜底 - 微信 openid/unionid/mini_openid 存各自列, 不污染 username --- app/api/routers/auth.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/app/api/routers/auth.py b/app/api/routers/auth.py index 99d5c9a..0f3d788 100644 --- a/app/api/routers/auth.py +++ b/app/api/routers/auth.py @@ -490,11 +490,12 @@ async def phone_login(req: PhoneLoginRequest, request: Request, db: Database = D except sms.SmsError as exc: raise HTTPException(status_code=401, detail=str(exc)) - # 手机号唯一:既按「登录名=手机号」查,也按「已绑定手机」查(微信等身份绑了手机的用户)。 - user = await db.users.find_by_phone(req.phone) or await db.users.get_by_username(req.phone) + # 手机号唯一:只按「已绑定手机 phone 列」查(登录名 username 与手机号是独立概念,不互查)。 + user = await db.users.find_by_phone(req.phone) if user is None: + # 登录名独立生成(不=手机号),手机号存入 phone 列;用户以短信码登录。 user = await db.users.create( - req.phone, password=secrets.token_hex(16), + f"u_{secrets.token_hex(10)}", password=secrets.token_hex(16), phone=req.phone, role="opc_member", source=_client_source(request, getattr(req, "source", ""), "phone"), auth_type="phone", register_ip=_client_ip(request), @@ -531,7 +532,7 @@ async def wx_login(req: WxLoginRequest, request: Request, db: Database = Depends user = await db.users.get_by_wx_openid(openid) if user is None: user = await db.users.create( - f"wx_{openid[:24]}", password=secrets.token_hex(16), + f"wx_{secrets.token_hex(10)}", password=secrets.token_hex(16), wx_openid=openid if not is_mini else "", wx_mini_openid=openid if is_mini else "", nickname=str(getattr(req, "nickName", "") or ""), @@ -657,7 +658,7 @@ async def _find_or_create_wx_user( user = await db.users.get_by_wx_openid(openid) if user is None: user = await db.users.create( - f"wx_{openid[:24]}", password=secrets.token_hex(16), + f"wx_{secrets.token_hex(10)}", password=secrets.token_hex(16), wx_openid=openid, nickname="微信用户", role="opc_member", source=_client_source(request, "", "wx_openid"), auth_type="wx_openid", @@ -839,7 +840,7 @@ async def mp_qr_confirm(request: Request, req: MpQrConfirmRequest, db: Database user = await db.users.get_by_wx_mini_openid(openid) if user is None: user = await db.users.create( - f"wx_{openid[:24]}", password=secrets.token_hex(16), + f"wx_{secrets.token_hex(10)}", password=secrets.token_hex(16), wx_mini_openid=openid, nickname="微信小程序用户", role="opc_member", source="mini_program", auth_type="wx_openid", register_ip=_client_ip(request),