返回 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