# 管理后台操作中自动退出:第二轮修复(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` 通过。 - 发布结果另行追加;本节不将本地验证等同于正式部署,也不声称已完成受影响用户环境的持续使用验收。 ## 正式发布结果 - 修复提交 `3a19e40081d88221dbf218d31dfc8f7d437cc2da` 已推送;发布版本 `3a19e40081d8-20261016T022415035Z`。 - 发布前备份正式 OBS 桶的 425 个对象,共 23,427,646 字节;源站入口与公网旧入口一致。受保护的本机备份与上传记录位于 `~/.local/state/xiaoshu/cloud-releases/2026-10-16-admin-session/`。 - 使用已验证的生产构建,先上传资源并逐个核对源站哈希,再更新版本清单和入口;切换前再次核对旧入口没有被其他发布改变。保留全部旧哈希文件。 - CDN 刷新任务 `7897307878`:`task_done`,成功 1、失败 0。 - 公网版本、95 个文件 SHA-256、发布脚本中的深层路由全部校验通过。不带查询参数的 `/`、`/admin/login`、`/admin/dashboard`、`/admin/store-home`、`/admin/schedule` 均返回 HTTP 200 和新入口。 - 额外只读探测:人为构造的无效 token 调用正式 `/parse/users/me` 返回 HTTP 400、错误码 209,符合修复后的真实失效识别条件。 - 本次未修改云函数、数据库或服务端会话期限;未主动注销现有用户会话。已打开的旧页面需刷新以加载新脚本。 - 用户现场的持续操作验收尚未完成;未取得当次退出日志,不能据此声称所有频繁退出原因均已排除。