fix(#1718/#1714): 微信回调纠错 + 上传失败可观测性 + 哈希性能 + 昵称不预填 #1723
Reference in New Issue
Block a user
Delete Branch "fix/1718-callback-error-observability"
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. 微信回调纠错(#1718)
WechatCallback与绑定回调WechatBindCallback同步处理)api/errors.ts getErrorMessage(),提取 axiosresponse.data.detail(含 FastAPI 422 数组、嵌套对象),不再吞成「微信登录失败,请重试」error=access_denied),页面展示真实原因wechatStartingRef同步守卫,wechatLoading 期间不重复请求授权 URL(连点两次后一次 state 覆盖前一次导致回调失败)2. 上传失败可观测性(#1714)
getOrCreateDefaultProject()失败包装为独立明确提示「初始化默认项目失败,无法开始上传:…」__msgShown),OSS XHR 错误不经 axios 仍会弹 toast3. 大文件哈希性能(#1714)
4. 昵称引导页
WechatOnboarding昵称输入框 initialValues.display_name 固定空字符串,不预填微信昵称/占位名,新用户必须自己输入测试
api/errors.ts、WechatBindCallback 测试;WechatCallback 重写为 8 例(含本地无 state 不误杀、detail 透传、error 重定向);uploadDedup 补抽样路径 slice 断言;useAssetUpload 补 prepare 失败/错误明细断言;WechatOnboarding 补不预填断言自测
🚀 预览环境已部署
CI全绿,自动审批通过。
CI全绿,自动审批通过。
【阻塞级判定】
📊 审查概览
🔴 阻塞级问题(必须修复)
无
💡 改进建议(不阻塞合并)
localStorage对state的比对校验,改为完全依赖后端的 "state store" 进行一次性消费校验。虽然这解决了“微信内打开/跨浏览器场景无本地 state 导致误杀”的兼容性问题,但削弱了前端的防御深度。state的生成、绑定(与用户会话关联)、一次性消费校验以及过期机制,以防止 CSRF 攻击。在上线前建议进行安全测试,确认伪造回调请求无法绕过验证。✅良好实践
apps/web/src/api/errors.ts统一提取错误信息,兼容 Axios、OSS、普通 Error 等多种场景,显著提升了用户体验和错误排查效率。Login.tsx中使用useRef实现了微信登录的防连点保护,比单纯依赖 state 更可靠。✅ 格式检查通过 | ✅ 逻辑审查通过 | ✅ 性能优化良好
🤖 由 AI 代码审查机器人自动生成 | 2026-09-05 14:03:39 | 模型:
🗑️ 预览环境已清理
PR #1723 已关闭或合并,对应的预览环境已被清理。