29a6aa9112
refresh token 是单次使用+轮换(服务端每次刷新 DEL 旧 JTI 发新的)。冷启动/进 页面会并发打多个接口,access(15min)过期后同时多次 401,各自拿同一个旧 refresh token 去刷新:第一个成功轮换,其余拿已作废的 JTI 必被拒 → 误触发 logout 把用户 踢回登录页。与平台无关(共用 auth 逻辑),表现为「放久了/覆盖更新后要重新登录」。 修法:AuthNotifier.refresh() 用共享 in-flight future(single-flight)合并并发刷新, 旧 token 只被消费一次。新增 auth_refresh_singleflight_test 覆盖并发只刷一次 + 刷新后可再刷。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>