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:
2026-05-27 18:48:24 +08:00
parent 8c50afc120
commit 1eef3ae614
3 changed files with 124 additions and 56 deletions

View File

@@ -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:
"""开发环境:使用固定测试账号,不依赖微信"""