fix: preserve BeeCount Cloud sessions across auth instances - #440
fix: preserve BeeCount Cloud sessions across auth instances#440tedzhouhk wants to merge 2 commits into
Conversation
|
我把这个 PR 的生产代码读完了。先说结论:按目前的信息我倾向关掉,但如果你能补上下面这些,我愿意重新评估。 我需要的信息对这个 PR 里的每一项机制,麻烦说明:
#434 之所以能合,是因为它满足了这四条:issue #433 有明确报错、有用户报告、我按你的描述真机复现了、根因定位到配置页与同步信息页两个入口的时序差异。这个 PR 目前一条都没有 —— 我看到的是完整的测试和自洽的推理,但看不到任何一个真实发生过的故障。 为什么我对这个 PR 特别谨慎这个 PR 的前提正在消失。 它解决的全部是「多个 auth 实例互相踩」的问题:
但 #434 已经合并,配置页现在用共享实例登录;#439 如果合并, 换句话说:#439 和这个 PR 是同一个问题的两种解法 —— #439 是「消除多实例」,本 PR 是「让多实例互相安全」。两个都做是重复投资,而 #439 只有 20 行、还顺手让架构更清晰。这也是我更倾向 #439 那条路的原因。 唯一一项与实例数无关的
如果这一项有实际现象支撑(用户报告过「点了退出还是登录状态」、或你真机复现过),麻烦只把它单独提出来,我很快就能合 —— 那会是个几十行的小 PR,收益清楚。 另外,这个 PR 已经明显超出拆分范围从 #434 拆出来时是约 90 行生产代码,现在是 230 行。新增的 logout tombstone、账号切换守卫、进程级静态锁都不在原来的拆分范围内。 进程级静态锁( 所以
再次感谢你这一轮的配合,#434 拆得很干净,收敛后一次就合了。 |
|
感谢详细评估,认同这里应优先收敛到单实例方向,而不是在缺少真实故障支撑时引入跨实例协调、进程级锁和额外 session 状态机。 目前我没有观察到或复现过「退出登录后登录态复活」的真实现象,因此也不保留 |
修复内容
currentUser、requireAccessToken和 refresh 前同步同一服务地址的持久化 session根因
_refreshInFlight只能去重单个BeeCountCloudAuthService实例内的请求。App 内多个实例共用SharedPreferences,但各自缓存内存 session;rotating refresh、2FA 登录、账号切换和退出并发时,旧实例可能删除或覆盖新 session,或者在退出后继续使用内存 token。本问题与 #434 的配置页登录路径不同,因此按维护者建议独立评审。
Agentic review
审查过程中发现并修复:
最终复核无剩余 findings。
验证
全部测试均在 Flutter 3.27.3 容器中限制
1.5GB内存、2 CPU、单并发运行:Follow-up to #434.