Electron-Vue3下的多账号时进程通信携带标识符的方式
Electron-Vue3 多账号 IPC 通信标识符方案
#tech / dev / desktop
#resource / electron
#type / howto
#status / growing
[!info] related notes
Electron-Vue3下的多账号时进程通信携带标识符的方式
1. 每次 IPC 通信都带上 account_uuid(最直接)
做法:
每次调用 IPC 方法时,都在参数中显式传递当前用户的 account_uuid。
优点:简单直观,主进程处理逻辑清晰。 缺点:每个请求都要带,代码冗余,容易遗漏。
示例:
// 渲染进程
window.electronAPI.getUserData({ account_uuid, ...otherParams });
// 主进程
ipcMain.handle('getUserData', (event, { account_uuid, ...otherParams }) => {
// 用 account_uuid 查询数据
});
2. 登录/切换账号时设置全局用户上下文(推荐)
做法:
- 渲染进程登录/切换账号后,通过 IPC 通知主进程当前的 account_uuid。
- 主进程保存当前会话的 account_uuid(比如保存在 event.sender 上,或用 Map 记录每个 webContents 的 uuid)。
- 后续 IPC 请求无需每次都带 account_uuid,主进程自动关联。
优点:
- 代码简洁,业务接口参数更干净。
- 不容易遗漏,安全性更高。
示例:
// 渲染进程:登录或切换账号时
window.electronAPI.setAccountUuid(account_uuid);
// 主进程
const userContextMap = new Map<number, string>(); // webContents.id -> account_uuid
ipcMain.handle('setAccountUuid', (event, account_uuid) => {
userContextMap.set(event.sender.id, account_uuid);
});
ipcMain.handle('getUserData', (event, params) => {
const account_uuid = userContextMap.get(event.sender.id);
// 用 account_uuid 查询数据
});
3. Token/Session 机制(适合多窗口或多端)
如果你的应用有多窗口或多端同步需求,可以用 token 或 sessionId 机制,每个窗口/端有独立的 session,主进程用 sessionId 关联用户。
4. 结合 Pinia/Vuex 管理当前账号
在渲染进程用 Pinia/Vuex 管理当前账号信息,所有业务 action 自动带上当前账号,或者在调用 IPC 前自动补全。
总结
- 小型项目:每次带 account_uuid 也可以。
- 中大型/多窗口项目:推荐“登录时设置全局用户上下文”,主进程自动关联,接口更简洁。
- 安全性:主进程要做好校验,防止跨账号数据串用。
最佳实践推荐:
登录/切换账号时通过 IPC 设置当前账号,主进程用 Map 记录 webContents.id 与 account_uuid 的映射,后续所有 IPC 请求自动带入,无需每次传递。
这样既安全又易维护,适合 Electron + Vue3 多账号场景。