dailyuse本地登录流程和powersync同步问题

dailyuse 本地登录恢复、认证状态同步与 PowerSync 初始化竞态问题的排障记录

#tech / dev / desktop #resource / electron #type / debug #status / growing

[!info] related notes

dailyuse本地登录流程和powersync同步问题

问题

TL;DR: 系统审查发现了 6 个相互关联的 bug,导致个人中心 “Authentication required” 错误、PowerSync 连接失败和 identityId 问题。核心原因是:sessionId 不一致、main 进程与 renderer 认证状态不同步、PowerSync 重复/竞态初始化。


Phase 1: 修复关键认证状态 Bug

Step 1: 修复 login 流程中 sessionId 不匹配

Step 2: 添加 renderer 启动时的认证状态同步

  • 文件authenticationStore.ts, renderer main.ts
  • 问题: Renderer 依赖 Pinia 持久化 (localStorage)。如果 main 进程会话丢失(过期、数据库损坏),但 localStorage 仍存有旧 token,renderer 显示 isAuthenticated = true 但所有 withAuth() IPC 调用都返回 AUTH_REQUIRED
  • 修复: renderer 启动时(路由导航前),调用 auth:get-status IPC 验证 main 进程认证状态。若不一致则:调用 auth:initialize 尝试恢复,若仍失败则清除 store 并跳转登录

Step 3: 非 auto-login 流程添加 auth:initialize 调用


Phase 2: 修复 PowerSync 初始化问题

Step 4: 移除 app-lifecycle.ts 中重复的 PowerSync 初始化

Step 5: 为 connectPowerSync() 添加并发保护

Step 6: 将 PowerSync 初始化从 setImmediate 改为可追踪的 Promise


Verification

  1. 登录 → 导航到个人中心 → 验证无 AUTH_REQUIRED 错误
  2. 登录 → 关闭应用 → 重启 → 验证 auto-login 恢复会话 → 个人中心正常
  3. 登录(rememberPassword) → 断网 → 重启 → 离线登录 → 个人中心正常
  4. 登录 → 验证 PowerSync 日志显示 “Connected” → 无重复连接日志 → 数据同步正常
  5. 注册 → 验证个人中心正常 → 验证 PowerSync 连接
  6. 快速导航多个需认证页面 → 无 AUTH_REQUIRED 错误
创建于 2026/3/9 更新于 2026/5/27