Conversation
|
感谢拆分,#434 已经合并了。这个 PR 我先提一件事,可能会影响你要不要保留其中一部分改动。
|
|
补充一下上一条评论。除了摘掉 我需要的信息对剩下的
#434 之所以能合,是因为这三条都齐了:issue #433 有明确报错文案、有用户报告、我按你的描述真机复现出来了、根因定位到两个登录入口的时序差异。这个 PR 目前没有对应的现象描述。 具体想问的是:#434 合并之后, 我的理解是配置页、同步信息页和 SyncEngine 现在都走共享实例了, 需要一起定的方向问题这个 PR 和 #440 是同一个问题的两种解法:
两个都做是重复投资。我倾向本 PR 这条路 —— 更小、而且让架构朝「全 App 唯一实例」收敛,#440 那些跨实例守卫在单实例下就没有存在意义了。 所以如果你要保这个 PR,请顺带说明你怎么看这个方向选择;如果你认为必须走 #440 那条,也请说明为什么消除多实例不够。 上一条提到的两点仍然需要确认
所以
不是否定你的分析质量。只是在没有实测故障支撑的情况下改认证和 provider 生命周期,回归风险我没法评估。 |
|
已按建议处理,并补上 #434 合并后的实测现象:
这说明 #434 合并后,独立的 定向测试已在 Flutter 3.27.3、1.5GB 内存、2 CPU、单并发下通过: |
|
@TNT-Likely gentle ping |
|
@tedzhouhk 我上次试了还没办法复现你这个问题 |
|
@TNT-Likely 等一段时间了吗?刚登录是可用的。pr description里我attach了ai读取的log |
|
@tedzhouhk 等了 可以再看看提供下更详细的复现步骤 |
0052464 to
b117465
Compare
|
@TNT-Likely 今天已在官方 3.8.0 Android 真机上稳定复现,步骤已缩短到:
不需要创建标签、切换本地模式或等 token 过期。脱敏日志: 2FA 成功后不到 1 秒,另一套 auth 就重新进入 challenge,而持有正确 session 的实例仍在正常 refresh/sync;31 秒后重试与 我已将分支 rebase 到 3.8.0/main,并按这次复现把 BeeCount Cloud「测试连接」也改为复用 两个定向测试在 1.5GB / 2 CPU / |
|
@tedzhouhk 感谢补齐 3.8.0 真机复现步骤和日志,这个现象与「测试连接额外创建一套 BeeCount Cloud auth/session」是一致的。 我重新审视了当前最终 diff,准备把这件事按两个层次处理: 这次 PR 建议保留请保留 BeeCount Cloud 的「测试连接」改为复用 这条路径直接覆盖了你给出的复现步骤,并且页面不再自行 请从本 PR 移除请移除 它作为短期修复可以工作,但会让本应通用的 后续较完整的方向
这样所有正式业务路径取得的都是同一个 这部分属于一次独立的生命周期重构。目前问题集中在 BeeCount Cloud + 2FA 路径,且测试连接改动已经能修掉明确复现入口,我认为完整重构优先级不高,不应阻塞当前的小修复或 3.8.1。你如果有兴趣可以另开设计/实现 PR,我会很乐意一起评审;否则我们后续统一规划也可以。 |
|
@TNT-Likely 感谢回复和建议!我理解您希望先缩小修改范围,不过我考虑了一下,觉得单独修改「测试连接」的收益比较有限,还是希望从会话管理这一层统一处理,所以已经将这个 PR 调整为统一会话管理,并补充了相关回归测试。 2FA 对我来说是硬需求:我个人要求所有暴露在公网的服务都强制启用 2FA,因此 App 在开启 2FA 后能稳定登录和同步,对我非常重要。 这次调整扩大了 review 的范围,辛苦您了。方便的话,麻烦帮忙 review 一下,也欢迎指出实现中需要调整的地方。感谢! |
背景与范围
将本 PR 从局部 provider 复用扩展为 App 层会话生命周期重构,而不只修复「测试连接」。这次主动扩大了范围,与此前建议只保留连接测试改动的方向不同,请按新的范围审阅。
多个入口通过工厂各自创建服务时,持久化存储相同并不代表内存中的认证状态相同。2FA 登录、UI 认证和同步可能因此使用不同的会话。历史服务端日志能确认验证成功后仍出现登录挑战,但不能仅凭这些日志定位到某一个 Dart 实例;下面通过自动化测试验证实例关系。
实现
CloudSessionManager/CloudSession,按完整配置管理当前服务;相同配置复用实例,并发初始化合并,配置切换串行释放旧服务,过期初始化结果不会成为当前会话。authServiceProvider、BeeCount Cloud provider、快照同步统一从活动会话取服务;保留工厂创建独立实例的语义,不引入工厂全局缓存。try/finally生命周期;BeeCount Cloud 临时认证可禁用持久化读写,避免覆盖活动登录。该选项不宣称隔离 Supabase SDK 自身的全局认证持久化,也没有新增草稿配置 UI。边界
验证
git diff --check通过。--concurrency=1),Docker 限制--memory=1536m --memory-swap=1536m --cpus=1 --pids-limit=256。-9退出,没有提高限制重跑。不能将此次分析记为通过。Agentic review 后续修复