This commit is contained in:
zlwu committed 2026-08-11 11:13:01 +08:00
1 parent 80138c6388
commit 693e8a678e
682 files changed
+211375 -5306

No files matched your search

+8 -31
View File
@@ -11,12 +11,14 @@ from app.core.database import get_db
from app.core.response import error_response, success_response
from app.crud.user import user_crud
from app.services.issue_user_tokens import issue_tokens_for_user
from app.services.wechat_login_service import resolve_wechat_login_user
from app.services.wechat_mini_auth import (
WechatMiniAuthError,
code2session,
get_phone_number,
)
router = APIRouter(prefix="/mini/auth", tags=["小程序鉴权"])
@@ -34,7 +36,7 @@ async def _resolve_user_id(request: Request, db: Session) -> str:
@router.post("/wechat-login", response_model=dict)
async def wechat_login(body: dict, db: Session = Depends(get_db)):
"""微信授权登录:优先 openid;未绑定则用手机号匹配员工并绑定。"""
"""微信授权登录:须授权手机号;openid 已绑定也须与账号 phone_no 一致。"""
login_code = (body.get("loginCode") or "").strip()
phone_code = (body.get("phoneCode") or "").strip() or None
@@ -43,15 +45,6 @@ async def wechat_login(body: dict, db: Session = Depends(get_db)):
except WechatMiniAuthError as exc:
return error_response(400, str(exc))
openid = sess["openid"]
user = user_crud.get_by_wx_openid(db, openid)
if user:
try:
data = await issue_tokens_for_user(db, user)
except ValueError as exc:
return error_response(403, str(exc))
return success_response(data)
if not phone_code:
return error_response(400, "请授权手机号登录,或使用账号密码登录")
@@ -60,27 +53,11 @@ async def wechat_login(body: dict, db: Session = Depends(get_db)):
except WechatMiniAuthError as exc:
return error_response(400, str(exc))
users = user_crud.list_active_by_phone_no(db, phone)
if not users:
return error_response(
401, "未找到与该手机号匹配的员工账号,请使用账号密码登录"
)
if len(users) > 1:
return error_response(400, "手机号对应多个账号,请使用账号密码登录")
user = users[0]
other = user_crud.get_by_wx_openid(db, openid)
if other and other.id != user.id:
return error_response(409, "该微信已绑定其他账号")
existing_oid = (getattr(user, "wx_openid", None) or "").strip()
if existing_oid and existing_oid != openid:
return error_response(409, "该账号已绑定其他微信,请联系管理员")
user.wx_openid = openid
user.update_time = datetime.now()
db.add(user)
db.commit()
db.refresh(user)
user, err_msg, err_code = resolve_wechat_login_user(
db, openid=sess["openid"], phone=phone
)
if err_msg:
return error_response(err_code or 400, err_msg)
try:
data = await issue_tokens_for_user(db, user)