feat(#1718): 微信 state Redis 化 + 回调 UA 日志 + 中文昵称 UTF-8 修复 #1724
Reference in New Issue
Block a user
Delete Branch "feature/wechat-state-redis-1718"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
改动
1. state 存储 Redis 化(多实例/容器重启安全)
RedisStateStore:复用 celery Redis,key 前缀wechat:state:,TTL 10 分钟SET NX EX写入;Lua 脚本原子GET+DEL一次性消费(兼容 Redis <6.2 无 GETDEL),eval 不可用退化 GET+DELETEMemoryStateStore,登录流程不中断get_wechat_oauth_service()单例默认使用 Redis store(取 CELERY_BROKER_URL/REDIS_URL),配置缺失降级内存2. /wechat/callback 可观测日志
3. 中文昵称乱码修复
.json()前显式encoding=utf-8测试
OSS 直传排查结论(另见群里汇报)
OSS bucket CORS 规则、presign 有效期、endpoint/区域均正常(实测签名 POST 201 成功);1GB 上传失败时后端 72h 无任何 prepare 请求到达,问题在前端 prepare 之前阶段(整文件哈希阻塞/默认项目创建),属前端 #1718/#1714 任务范围。
🚀 预览环境已部署
【阻塞级判定】
📊 审查概览
🔴 阻塞级问题(必须修复)
无
💡 改进建议(不阻塞合并)
[wechat_oauth_service.py: 73] RedisStateStore.put 方法建议检查返回值
self._redis.set(..., nx=True, ...)在 key 已存在时会返回False。虽然 state 碰撞概率极低,但若发生碰撞会导致 state 未成功写入 Redis,进而导致后续回调验证失败。建议增加对返回值的判断,若为False可记录警告日志或抛出异常,以便于排查极端情况下的登录失败问题。[wechat_oauth_service.py: 288] _build_default_state_store 函数建议增加日志
✅ 良好实践
RedisStateStore在 Redis 不可用时自动降级到MemoryStateStore,并在写入/读取异常时尝试降级,保证了服务的高可用性。resp.encoding = "utf-8"修复了微信 API 返回中文乱码的问题,定位准确。✅ 格式检查通过 | ✅ 逻辑审查通过 | ✅ 性能良好
🤖 由 AI 代码审查机器人自动生成 | 2026-09-05 12:49:18 | 模型:
🗑️ 预览环境已清理
PR #1724 已关闭或合并,对应的预览环境已被清理。