fix: use shared BeeCount Cloud provider for config login - #434
Conversation
|
感谢 PR,也感谢你把 issue 写得那么详细 —— 我按你的步骤复现出来了,根因确认没问题。 不过想请你把范围收一下:核心修复其实只需要 根因确认main 上 BeeCount Cloud 的 auth 实例确实是多份: 触发条件是登录入口,不是「等几分钟」先排除时间因素: 实测差异在两个登录入口:从「云服务配置页」点确认登录会出问题,从「云服务同步信息页」点「重新登录」不会。
配置页那条路是两刀叠加:
而且它不会自愈: 三个条件要同时满足才命中,这也是我一开始复现不出来的原因:
为什么核心只需要配置页那一处你在 两行都必要: 我还确认了一个担心的点:第 1 步那次静默登录失败会置 30 秒冷却,但 所以这一处单独就能修掉复现路径,可以合。 请从本 PR 移除的部分先说清楚:这些我只是希望不要混在这个 PR 里,并不是给你派活。以目前的实际反馈来看它们我暂时都不需要,就这么放着也没问题。如果你自己有兴趣继续贡献,欢迎另开 PR,我单独看;但完全不做也完全 OK,不要有压力。
关于测试坦白说这里有个权衡:你新增的两个单元测试测的正好是要拆走的那两个机制(回读 prefs、 我接受这个权衡 —— 复现路径已经明确,我手工验证过。那两个测试跟着对应机制一起去掉就行;如果你后面真的另开 PR 做那两项,把它们一起带上就好。 顺带提一句,你那两个测试写得很好:我把它们单独拿到 main 上跑,两个都失败,第一个的报错正是 issue 标题里那句 我本地补跑的部分你 PR 里提到完整
工程质量本身没问题,这次收范围纯粹是想让每个 PR 只解决一件事。缩到只剩配置页那一处之后我就合。 |
|
已按建议完成拆分,谢谢详细定位和范围说明。
本 PR 最终 diff 现在只有一个文件。 |
修复内容
beecountCloudProviderInstance根因
云服务配置页原先通过
createCloudServices(cfg)临时创建认证实例并完成登录。2FA session 虽然写入了临时实例和SharedPreferences,但 SyncEngine 已经持有的共享实例内存中仍然是未登录状态,因此后续写操作可能报CloudSyncUser not authenticated。本 PR 按维护者建议收窄,只修复配置页这一条确定的复现路径。跨实例 session 接管、rotating refresh token 竞态以及 Provider 统一分别拆到独立 PR 评审。
验证
lib/pages/cloud/cloud_service_page.dartgit diff --check通过Fixes #433