Electron主/渲染进程用户认证管理及应用架构设计咨询
针对你的Electron + Supabase应用设计建议
一、用户认证管理方案
核心原则:只在渲染进程处理Supabase认证逻辑,避免双进程重复登录,主进程仅负责会话持久化与状态同步
- 渲染进程初始化唯一的Supabase客户端,所有Supabase HTTP请求(包括登录)都在这里执行,符合企业网络对HTTP请求的安全要求
- 登录成功后,将Supabase的会话对象(
session)通过IPC传递给主进程,主进程用加密存储工具(比如electron-store开启加密选项)持久化保存会话 - 应用启动时,渲染进程先向主进程请求已存储的会话:
- 若存在有效会话,直接用它初始化Supabase客户端,实现自动登录
- 若不存在或会话过期,渲染进程展示登录界面引导用户操作
- 当Supabase会话自动刷新时(SDK内置逻辑),渲染进程及时将新会话同步给主进程更新存储,确保下次启动能复用
二、进程职责划分
明确边界,避免逻辑混乱:
渲染进程职责
- 所有用户交互:登录表单、本地数据库凭证输入UI、状态提示
- 所有HTTP请求:Supabase认证、数据上传至目标位置
- 接收主进程传来的本地数据库数据,完成格式转换(若需要)后发起上传请求
- 维护Supabase客户端的生命周期,处理会话过期、刷新等逻辑
主进程职责
- 会话持久化:加密存储渲染进程同步的Supabase会话,启动时返回给渲染进程
- 本地数据库操作:接收渲染进程传递的凭证,建立/维护本地数据库连接,执行数据查询
- 定时任务调度:负责每X分钟触发本地数据库数据获取的任务(避免渲染进程被隐藏/关闭时任务中断)
- IPC通信管控:定义清晰的IPC消息协议(比如
store-session、fetch-local-data、send-local-credential),处理进程间的消息传递与异常捕获 - 系统权限相关操作:比如本地文件访问、后台运行保障
三、关键流程示例
登录流程
- 渲染进程请求主进程获取存储的会话
- 无有效会话 → 渲染进程展示登录页,用户输入凭证
- 渲染进程调用Supabase
signInWithPassword完成登录 - 登录成功 → 渲染进程通过IPC发送
store-session消息,携带会话对象 - 主进程加密存储会话,返回确认消息给渲染进程
- 渲染进程进入主界面,展示本地数据库凭证输入表单
本地数据同步流程
- 用户在渲染进程输入本地数据库凭证,通过IPC发送
send-local-credential消息给主进程 - 主进程验证凭证,建立本地数据库连接(失败则返回错误提示给渲染进程)
- 主进程启动定时任务(每X分钟执行一次)
- 定时任务触发 → 主进程查询本地数据库,获取数据后通过IPC发送
local-data-ready消息给渲染进程 - 渲染进程收到数据后,用已认证的Supabase客户端将数据上传至目标位置
四、其他实用见解
- 会话安全:主进程存储会话时必须加密,避免明文存储敏感信息;渲染进程不要在本地存储会话,完全依赖主进程的持久化
- 错误处理:IPC通信时要捕获异常,比如本地数据库连接失败、Supabase上传超时,及时将错误信息反馈到渲染进程的UI提示用户
- 定时任务优化:使用
node-schedule替代原生setInterval,支持更灵活的调度规则,同时要定期检查本地数据库连接状态,避免无效查询 - 权限隔离:渲染进程禁止直接访问本地文件系统,所有本地数据库操作通过主进程代理,降低XSS攻击风险
- Supabase SDK复用:渲染进程全局维护一个Supabase客户端实例,避免重复初始化,减少资源消耗
内容的提问来源于stack exchange,提问作者pida
相关产品推荐
相关产品推荐

