auth-diag.ts
3.26 KB
-
fix(auth): 修运行期会话掉线("登录已过期")—— 治竞态 + 补埋点告警 · fcd77227
根因(对接方反复报的"用着用着登录已过期"): - 竞态:bootstrap 的"过期前 60s 自动刷"定时器直接调 refreshToken(),绕过 api-client 的 单飞锁 → 定时器与请求 401 兜底刷可能同时拿同一个一次性 refresh token 去换 → 一个成功 轮换(del 旧 jti),另一个拿已作废 jti → 10103 revoked → 误清会话。 - 盲区:api-client 运行期 clear() 路径无 client-diag 信标 → 服务端无日志、不触发企微告警。 改动: - lib/auth-diag.ts:抽出共享诊断信标(bootstrap 与 api-client 共用)。 - api-client.ts:两个 clear 点(refresh 被拒 / 受保护请求鉴权失败)补运行期掉线信标。 - use-auth-bootstrap.ts:过期定时器改走共享单飞 tryRefresh,消除双刷竞态。 - auth.service.ts:clientDiag 告警门控纳入 runtime-refresh-fail / runtime-auth-clear, alertSessionExpiry 增运行期根因文案与标题。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
luoqi committed