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

2.0 KiB

切角色 / 刷新令牌「掉登」已修 + 前端必改一项(原子保存 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(行为:校验+续期原子化;响应结构不变)