hl-api-changelog/changelogs-v2/2026-06/38_4529_切角色与刷新token原子保存_前端必改-管理后台.md
API Changelog Bot 7ee03a8399 docs(changelog): 房务E2E揪出3 bug修复对接(#4491改天数级联/#4492反序聊天/#4529切角色token)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-28 10:09:59 +08:00

27 行
2.0 KiB
Markdown

此文件含有模棱两可的 Unicode 字符

此文件含有可能会与其他字符混淆的 Unicode 字符。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。

# 切角色 / 刷新令牌「掉登」已修 + 前端必改一项(原子保存 token
> 模块admin 鉴权hl-user-service/ 管理后台
> 类型:后端 bug 修复PR #4529 已合 dev-v3 + 测试服实测生效)+ **前端必改一项加固**
> 日期2026-06-28
## 背景 / 修了什么(后端)
两个掉登 bug 已修:
- **Bug1切角色被登出**:超管切到「房务」等角色后刷新页面报「刷新令牌无效或已过期」被踢回原角色。根因:切角色会轮转 refresh 令牌、使旧 refresh 立即失效,前端若没存住新 refresh 就被登出。
- 后端修复:**切角色不再轮转 refresh**(只换发带新角色的 access,refresh 复用、保持有效)。即使前端不改也不会再因切角色被登出。
- **Bug2刷新偶发掉登**整页刷新偶发「刷新令牌无效或已过期」。根因refresh 校验与续期非原子,并发刷新读到中间态。
- 后端修复refresh 校验+续期改为 Redis 原子执行,并发刷新不再误判。
测试服实测:切角色后用原 refresh 刷新 200不掉登;同一 refresh 并发 3 次刷新全 200;切「定制师/房务」回归全正常。
## 前端必改1 项加固)
**切角色 `POST /admin/auth/switch-role` 与刷新 `POST /admin/auth/refresh` 的响应里,`token`(access) 与 `refreshToken` 要原子地一起保存**(两者同时落本地存储,避免只存其一),切角色后用响应里的新 `token` 调后续接口。
- 说明:后端每次 switch-role / refresh 都换发**新 access**并把旧 access 轮转出access 白名单 last-issued-wins。所以切角色/刷新后**必须改用响应里的新 access**,旧 access 会失效(这是既有设计,非本次改动)。本次修复保证的是 **refresh 不会因切角色失效**,刷新链路稳定。
## 影响接口
- `POST /admin/auth/switch-role`行为refresh 不再轮转;响应结构不变)
- `POST /admin/auth/refresh`(行为:校验+续期原子化;响应结构不变)