菜单

身份验证和API集成

相关源文件

本文档涵盖了 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

API 集成架构

HydraApi 服务是与 Hydra Cloud 后端通信的主要接口。它负责处理身份验证头、请求/响应处理和错误处理。

API 服务集成

组件目的关键方法
HydraApi核心 API 客户端服务get()post()patch()delete()
window.electron.getMe()获取当前用户详细信息返回 UserDetailsnull
window.electron.updateProfile()更新用户配置文件接受 UpdateProfileRequest
window.electron.signOut()退出当前用户清除令牌和会话

API 通信流程

来源: src/renderer/src/hooks/use-user-details.ts60-70 src/main/events/profile/update-profile.ts10-12

用户会话管理

用户身份验证状态通过 Redux 状态、本地存储持久化以及进程之间的 IPC 通信进行管理。

会话状态管理

userDetailsSlice 在 Redux 中管理身份验证状态

用户会话包含这些关键数据结构

状态属性类型目的
userDetailsUserDetails | null当前用户信息
profileBackgroundstring | null用户的配置文件背景图片
friendRequestsFriendRequest[]待处理的好友请求
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 流程的外部窗口

外部身份验证窗口模式提供了

  • 安全的 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