refactor: 小程序参数直传 uid/openid/phone,前端构建本地 token 完成登录
- 新增 createDummyToken() 从前端构建本地 JWT(后端不验签) - LoginPage 检测 URL 参数 uid/openid/phone 直接登录 - 新增 /api/auth/params-login 后端接口(后续可选) - 移除 paramsLogin API 调用,简化流程 - Debug 面板默认显示 - 修复 JWT base64url 解码
This commit is contained in:
@@ -74,6 +74,33 @@ async def exchange_code(req: ExchangeCodeRequest) -> TokenResponse:
|
||||
)
|
||||
|
||||
|
||||
class ParamsLoginRequest(BaseModel):
|
||||
uid: str = ""
|
||||
openid: str
|
||||
phone: str = ""
|
||||
|
||||
|
||||
@router.post("/params-login")
|
||||
async def params_login(req: ParamsLoginRequest) -> TokenResponse:
|
||||
"""小程序传 uid/openid/phone → 查找或创建用户 → 返回自签 token"""
|
||||
user = await User.find_one(User.openid == req.openid)
|
||||
if not user:
|
||||
user = User(openid=req.openid, phone=req.phone or None)
|
||||
await user.insert()
|
||||
else:
|
||||
if req.phone and req.phone != (user.phone or ""):
|
||||
user.phone = req.phone
|
||||
await user.save()
|
||||
|
||||
token = _build_token(user)
|
||||
return TokenResponse(
|
||||
token=token,
|
||||
user_id=str(user.id),
|
||||
openid=user.openid,
|
||||
mobile=user.phone or "",
|
||||
)
|
||||
|
||||
|
||||
@router.post("/dev-login")
|
||||
async def dev_login() -> TokenResponse:
|
||||
"""开发环境:使用固定测试账号,不依赖微信"""
|
||||
|
||||
Reference in New Issue
Block a user