← [ BACK_TO_NOTES ]

MemoFlow · Account / Desktop Profile 开发笔记

按版本记录离线 SQLite 账号、Electron IPC、本地 Profile 与云端认证同步方案。

#blog #growing #dev

Account 模块目标

我希望桌面端在没有网络时也能正常使用,连接云端之后又可以登录、同步和继续操作。因此 Account 不能只照搬 Web 登录流程,得先考虑 Electron 主进程里的本地数据和渲染进程如何通信。

V1.0.0

第一版把 Electron 主进程当作本地后端,Vue 渲染进程当作客户端。选择 SQLite 保存用户与业务数据,主进程封装 Model、Service 和 IPC,渲染层通过服务接口调用,而不是直接碰数据库。

本地账号暂时使用用户名与密码,先保存最基本的账号信息。SQLite 的优势是无需额外启动服务器、部署简单,又适合单机事务性数据;不过需要由主进程统一管理连接和访问,不能让任意渲染组件自行操作数据库。

这版优先实现离线登录、获取资料和业务调用流程。

v1.1.0

现在需要联网能力。初步想法是:用户从本地账号开始使用,选择同步时注册云端账号,并获得独立的在线身份;本地走 IPC,在线走 HTTP。

两种 Transport 可以共用相似的 Application 接口,但IPC 与 HTTP 只是通信方式,不能直接推导出本地身份和云端身份天然一一对应。

如果把“是否联网”直接写成 Account 的一个状态,之后切换用户、断网、退出登录和账号合并都会很难处理。所以需要进一步划清本地数据容器与云端登录会话。

V2.0.0

这版采用 Desktop Local Profile + Cloud Auth 的模型。

本地 Profile 是一份真正独立的数据容器,有稳定的 profileId、本地数据库和 Vault。Guest 也可以离线创建和修改自己的资料;是否能打开这份本地数据由 Profile Access/Unlock 决定。

云端登录交给 Better Auth,负责邮箱、验证状态和 Session;Account 只负责产品展示资料。登录会话有效与本地 Profile 已解锁是两个不同的判断,不能再共用一个笼统的 isAuthenticated。

v2.1.0

现在考虑 Guest 要连接云端账号的情况。

连接云端不应该把已有本地资料、Vault 和文件目录换成另一套空容器。方案是保留原来的 profileId 与本地资源,通过明确的 CloudBinding 和 Owner Adoption 将业务身份与云端账号联系起来。

如果目标云端账号已经绑定同一设备的另一个 Profile,不自动静默合并。退出云端登录也只影响在线能力,不应该删除或锁住用户本地数据。

V3.0.0

资料编辑与同步也需要明确权威:Desktop 的用户资料先在当前本地 Profile 数据库中保存,已经绑定云端时再通过带修订版本的 Outbox 异步交付。断网时保留待发送的修订,不需要为了等待服务端而阻塞本地编辑。

还要把几个操作分开:退出云端登录、锁定本地 Profile、关闭云端 Account、删除本地 Profile,分别对应不同的生命周期,尤其不能把退出登录等同于清除本地知识库。

这样本地优先和在线同步可以共存,而不必把“离线账号”简单当作一个等待升级的云端账号。

创建于 2026/1/24 更新于 2026/10/17
Digital Biome
Access

键盘导航

j / k / ↑ / ↓
选择对象
Enter / o
打开选择
/ 或 Ctrl+K
全站搜索
i / f / 1–4
筛选当前列表
g → h / l / p / t / a
首页 / 笔记 / 项目 / 工具 / About
r → 1–9
打开所选对象的关联
u
返回上一页
Esc
关闭浮层 / 取消命令;输入框内清空文本