模块-微信认证-saveSession时序导致槽位不刷新
问题现象
- 扫码登录成功后,弹窗提示"登录成功",但主页面槽位状态未变化
- 仍显示"未登录",需手动刷新页面才能看到登录后的账号信息
- 浏览器 Network 日志正常,
POST /api/wechat/auth/qrcode和GET /api/wechat/auth/status均返回 success
核心问题
modules/wechat/wechat_auth.py:_do_login() 中写入顺序错误:
1. set_login_state(slot, "success", ...) — 先更新内存状态(行 223)
2. 等待 3 秒提取昵称
3. save_session(slot, ...) — 后写数据库(行 275)
前端 startStatusPolling 检测到内存 "success" 立即调用 loadSlots() → get_all_active_sessions() 查询数据库,但 save_session() 还未提交,is_logged_in 为 False,槽位显示为未登录。
解决方法
将 save_session 移到第一次 set_login_state("success") 之前:
# wechat_auth.py ~216: 在原 set_login_state("success") 之前插入
save_session(slot, token, cookie_str, expires_at)
部署命令(后端变更需重启):
git add modules/wechat/wechat_auth.py
git commit -m "fix: save_session 提前到 set_login_state 之前"
git push origin main
ssh news 'cd /www/news && git pull origin main && systemctl restart news-backend'
下次防错措施
- 写 DB → 改内存 是安全的顺序,反向可能导致读取方查询到旧状态
- 验证方法:登录后立即查看
loadSlots()返回的slots[].logged_in是否为true - 涉及
_login_states(内存)和AuthSession(DB)双写时,统一先写 DB 再改内存