管理后台操作中自动退出:第二轮修复(2026-10-16)
用户再次确认:正在操作时突然回到登录页。未取得该次失败请求的网络记录,因此以下是已复现的代码缺陷,不将其直接等同于用户当次退出的唯一原因。
现场与复现
- 正式站
https://admin.xiaoshu.pro 版本为 3bf81740cc1ceca68b74da52bb8ba7baddc61fa7。实际下载的 JavaScript 包含上次添加的会话复核,同时仍包含普通 HTTP 401 清除登录、直接使用 storage 事件旧值的逻辑。
- 使用现有配置的运营会话只读请求 Parse
/sessions/me,HTTP 200;创建时间 2026-09-09,到期时间 2027-09-09。只证明这条抽查会话有效,不代表受影响用户会话均有效。
- 新增回归用例,在修改实现前运行:17 项中 5 项失败。复现了普通 401 误退出、非用户结构的成功响应误退出、旧请求清除另一标签页的新登录、排队的旧退出事件覆盖新登录,以及迟到的身份响应将旧登录写回共享存储。
修复
- Parse 复核只有 HTTP 400/401 且明确返回错误码 209 才判定 token 失效。单独的 HTTP 401、网络故障、异常响应结构保留登录,业务请求仍返回错误且不会自动重复写操作。
- 读取到真实用户对象后仍核对账号一致性、停用和删除状态;有效的安全退出行为保留。
- storage 通知到达时读取当前共享状态,避免重放排队中的旧登录/退出值;检查失败和清除会话之前同样核对共享状态。
- 身份信息落盘前同步共享登录,避免迟到响应覆盖其他标签页的新登录。
- 本地持久存储写入失败时保持标签页内会话可用,不因共享存储为空强迫退出。
验证
- ChromeHeadless 定向回归 36 项通过:会话服务、云请求、登录页、路由缓存、实时刷新。
npm run build:admin 通过;仅已有样式预算和 CommonJS 警告。
git diff --check 通过。
- 发布结果另行追加;本节不将本地验证等同于正式部署,也不声称已完成受影响用户环境的持续使用验收。