2.4 KiB
2.4 KiB
会会用户体系打通 · 部署与验证概览
完成内容
将 digital-avatar-app 的短信验证码登录从「DEV_MOCK 模拟」切换为真实会会开放平台对接,并部署到测试环境 geo-server:/root/avatar-test。
关键改动
backend/routers/huihui_auth.py重写- 真实端点:发码
POST /open/mobile/sms/code(query 参数)、登录POST /open/login/token(formData,loginType=code)。 - 签名范式与会会官方
sign(1).js逐字节一致:公共字段appId/accessId/timestamp(12h hh)/signType(MD5)/signVersion(1.0)/accessSecret/nonce→ 过滤空值 → 字典序 →k=v&→ 末尾accessSecret=secretKey→ MD5/SHA256 大写。 - 登录成功后建/链本地
users表(按会会 userId 唯一),签发本系统app_token会话。
- 真实端点:发码
- 真实凭证入环境
geo-server:/root/avatar-test/.env(及本地digital-avatar-app/.env):HUIHUI_APP_ID / HUIHUI_ACCESS_ID / HUIHUI_ACCESS_SECRET,HUIHUI_DEV_MOCK=false。.env已被.gitignore与backend/.dockerignore排除,不会入库/入镜像。
- 时区 bug 修复(关键)
- 容器默认 UTC,会会网关按北京时间校验时间戳 → 签名被拒("签名验证失败")。
_get_timestamp()改为显式timezone(timedelta(hours=8)),与容器系统时区解耦(不用ZoneInfo,slim 镜像缺 tzdata)。
验证结果(测试环境)
| 接口 | 结果 |
|---|---|
POST /api/huihui/sms/send(13800000001) |
网关 code=200 success, sent=true ✅ |
POST /api/huihui/sms/login(假验证码) |
网关 code=10000 验证码不正确(签名已接受)✅ |
GET /api/huihui/me(无 token) |
401 未登录(路由/鉴权门正常)✅ |
前端 :8099 → 后端 :8000 |
nginx /api 代理正常 ✅ |
待用户操作
在浏览器打开 http://192.168.1.188:8099 → 短信登录页 → 输入本人会会绑定手机号 → 获取真实验证码 → 登录。后端将调会会网关校验并写入 users 表,前端拿到 app_token + 会会资料后跳转。这是唯一未自动化的步骤(需真实手机号+真实验证码)。
排查笔记
- 测试服务器宿主
:8000另跑ai-virtual-news-backend;容器映射8011→8000,本地冒烟测试必须打:8011。 - 部署前用独立脚本(managed venv + httpx)直连真实网关验证签名,避免盲部署。