返回 Bug 清单
BUG-0268project-18高待处理backend-auth
AUTH.refresh 对 401/非 user 响应不清过期 token —— 所有依赖 AUTH.token 的登录守卫集体失效
发现:2026-10-01验证:2026-10-09置信度:70%
症状
token 过期后页面出现诡异的半登录态:部分组件认为已登录(读到旧 token)继续发请求吃 401,部分守卫判定未登录;通知横幅等渲染出错误状态
根因
全局 AUTH.refresh() 调 /auth/me 校验 token,但对 401 和'响应不是 user 对象'两种失败都没清 token——localStorage 里的过期 token 继续存在,导致'有 token = 已登录'假设的守卫全部基于过期凭据判断;且刷新期间无时序守卫,并发渲染读到中间态
修复方案
① refresh 加 _refreshing 时序守卫(刷新中渲染函数直接 return,等回调再进);② 401/catch/非 user 三种失败路径统一 saveToken(null)+token/user/role 重置为 guest;③ 刷新完成后再触发 renderNotifyDeferBanner 等依赖登录态的渲染
错误签名
auth refresh 401 过期 token 不清除 AUTH.token 守卫失效 saveToken(null)技术信息
来源项目
project-18
标签
project-18, mcp-reported