本文档涵盖了 Hydra 的身份验证系统以及与 Hydra Cloud API 的集成。这包括用户登录流程、令牌管理、API 通信模式和用户会话持久化。有关身份验证后用户配置文件和社交功能的信息,请参阅 用户配置文件和社交功能。
Hydra 实现了一个混合身份验证系统,该系统结合了外部 OAuth 风格的身份验证窗口和持久化会话管理。该系统连接了 Electron 主进程、渲染进程和外部 Hydra Cloud API,以提供无缝的用户身份验证和 API 集成。
身份验证系统遵循多进程架构,其中身份验证在渲染器中启动,通过外部窗口由主进程处理,并同步回应用程序状态。
来源: src/renderer/src/components/sidebar/sidebar-profile.tsx22-29 src/renderer/src/app.tsx183-195 src/renderer/src/hooks/use-user-details.ts60-70
来源: src/renderer/src/components/sidebar/sidebar-profile.tsx src/renderer/src/hooks/use-user-details.ts src/renderer/src/features/user-details-slice.ts src/renderer/src/app.tsx
HydraApi 服务是与 Hydra Cloud 后端通信的主要接口。它负责处理身份验证头、请求/响应处理和错误处理。
| 组件 | 目的 | 关键方法 |
|---|---|---|
HydraApi | 核心 API 客户端服务 | get()、post()、patch()、delete() |
window.electron.getMe() | 获取当前用户详细信息 | 返回 UserDetails 或 null |
window.electron.updateProfile() | 更新用户配置文件 | 接受 UpdateProfileRequest |
window.electron.signOut() | 退出当前用户 | 清除令牌和会话 |
来源: src/renderer/src/hooks/use-user-details.ts60-70 src/main/events/profile/update-profile.ts10-12
用户身份验证状态通过 Redux 状态、本地存储持久化以及进程之间的 IPC 通信进行管理。
userDetailsSlice 在 Redux 中管理身份验证状态
用户会话包含这些关键数据结构
| 状态属性 | 类型 | 目的 |
|---|---|---|
userDetails | UserDetails | null | 当前用户信息 |
profileBackground | string | null | 用户的配置文件背景图片 |
friendRequests | FriendRequest[] | 待处理的好友请求 |
friendRequestCount | 数字 | 待处理请求的数量 |
来源: src/renderer/src/features/user-details-slice.ts5-23 src/renderer/src/hooks/use-user-details.ts18-29
用户会话通过本地存储缓存跨应用程序重启保持持久化
来源: src/renderer/src/app.tsx110-136 src/renderer/src/hooks/use-user-details.ts46-58
身份验证使用外部浏览器窗口来安全地处理 OAuth 流程,将敏感的身份验证逻辑置于主应用程序上下文之外。
身份验证过程涉及启动处理 OAuth 流程的外部窗口
外部身份验证窗口模式提供了
来源: src/renderer/src/components/sidebar/sidebar-profile.tsx22-29 src/renderer/src/app.tsx138-155
虽然令牌存储细节由主进程处理,但身份验证系统包含了用于令牌管理和用户数据保护的安全功能。
| 功能 | 实现 | 目的 |
|---|---|---|
| 进程隔离 | 外部身份验证窗口 | 保持敏感的身份验证流程独立 |
| Sentry 集成 | 用户上下文跟踪 | 带用户上下文的错误监控 |
| 会话验证 | getMe() API 调用 | 验证令牌有效性 |
| 自动清理 | 退出处理 | 注销时清除所有用户数据 |
配置文件更新包括通过预签名 URL 处理安全的图片上传
来源: src/main/events/profile/update-profile.ts14-43 src/renderer/src/hooks/use-user-details.ts47-53
身份验证系统通过几个 IPC 事件进行协调,这些事件在进程之间同步状态
| 事件 | 方向 | 目的 |
|---|---|---|
onSignIn | 主进程 → 渲染进程 | 通知身份验证成功 |
onSignOut | 主进程 → 渲染进程 | 通知用户登出 |
getMe | 渲染进程 → 主进程 | 获取当前用户详细信息 |
syncFriendRequests | 渲染进程 → 主进程 | 同步好友数据 |
updateProfile | 渲染进程 → 主进程 | 更新用户配置文件 |
来源: src/renderer/src/app.tsx183-195 src/renderer/src/hooks/use-user-details.ts40-44 src/renderer/src/hooks/use-user-details.ts90-98