fix(web): 修复登录时序bug - token先存localStorage再取用户信息 #734
Reference in New Issue
Block a user
Delete Branch "fix/login-token-order-bug"
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?
CI全绿,自动审批通过。
CI全绿,自动审批通过。
🚀 预览环境已部署
📊 审查概览
❌ 需修改的问题(严重)
authApi.getCurrentUser()之前先将 token 写入了localStorage。如果getCurrentUser()请求失败(例如网络错误、服务器 500 或 Token 实际无效),函数会抛出异常并终止,导致后续的setAuth()不会被调用。此时,localStorage中残留了有效的 access_token,但应用内存状态(Context/State)中并未记录用户已登录。getCurrentUser()失败时回滚 token 的写入。可以使用try...catch包裹getCurrentUser,在 catch 块中清除 token,或者利用try...finally确保资源清理。💡 改进建议(一般)
[apps/web/src/hooks/useAuth.ts: 23-26 & 64-67] 代码重复
access_token和refresh_token存入localStorage的逻辑在useLogin和useWechatCallback两个函数中完全重复。建议提取为一个私有辅助函数(如persistTokens),以提高可维护性并避免未来修改时遗漏。[apps/web/src/hooks/useAuth.ts: 31 & 72] 潜在的重复写入
localStorage.setItem,随后又调用了setAuth。需要确认setAuth函数的内部实现。如果setAuth内部也会将 token 同步写入localStorage,则此处存在冗余的 I/O 操作。建议明确setAuth的职责边界(仅更新内存状态 vs 持久化存储),避免职责不清。✅ 良好实践
apiClient拦截器依赖localStorage的问题,通过调整写入顺序解决了getCurrentUser请求无法携带 Authorization header 的逻辑缺陷。refresh_token前进行了if (refreshToken)判断,避免了存入null或undefined字符串。🤖 由 AI 代码审查机器人自动生成 | 2026-07-22 19:23:57 | 模型:
🗑️ 预览环境已清理
PR #734 已关闭或合并,对应的预览环境已被清理。