Skip to content

Comments

feat(auth): 添加 GitHub 登录功能#94

Closed
h7ml wants to merge 10 commits intoHiveNexus:mainfrom
h7ml:feat/github-oauth2-login
Closed

feat(auth): 添加 GitHub 登录功能#94
h7ml wants to merge 10 commits intoHiveNexus:mainfrom
h7ml:feat/github-oauth2-login

Conversation

@h7ml
Copy link
Contributor

@h7ml h7ml commented Sep 17, 2025

📝 描述

此 PR 添加了 GitHub OAuth 登录功能,使用户能够使用 GitHub 账户进行身份验证。包含了环境变量配置、文档更新、数据库变更和前端集成。

🔄 更改类型

  • ✨ 新功能 (不会破坏现有功能的新功能)
  • 📚 文档更新
  • 🔧 配置更改
  • 🎨 样式/UI 更改

📋 所做更改

  • .env.example 中添加 GITHUB_CLIENT_IDGITHUB_CLIENT_SECRET 环境变量配置
  • 在 README.md 和 README_EN.md 中添加 GitHub 登录的配置说明和使用指南
  • 实现 GitHub OAuth 认证流程,包括回调处理和用户信息获取
  • 创建 GitHub 登录按钮组件并集成到登录页面
  • 在用户表中新增 githubUserId 字段用于存储 GitHub 用户唯一标识
  • 更新 auth.ts 认证逻辑以支持 GitHub 登录方式
  • 添加相应的错误处理和用户信息合并逻辑

🧪 测试

  • 我已在本地测试这些更改
  • 我已添加/更新单元测试
  • 我已在多个浏览器中测试
  • 所有现有测试都通过

测试用例

  1. GitHub 登录按钮正确显示和点击跳转
  2. OAuth 回调正确处理用户信息
  3. 新用户通过 GitHub 登录自动创建账户
  4. 已存在用户通过 GitHub 登录正确关联账户
  5. 错误情况处理(如取消授权、网络错误等)

📱 截图/视频

之前 之后
邮箱 企业微信 飞书 钉钉 新增 GitHub 登录选项
无第三方登录 支持 GitHub OAuth

🔐 安全考虑

  • 使用 HTTPS 进行 OAuth 通信
  • 验证 state 参数防止 CSRF 攻击
  • 安全存储 GitHub Client Secret
  • 实现正确的 token 验证和用户信息加密

📊 性能影响

  • 此更改不会对性能产生负面影响
  • OAuth 流程异步处理,不影响主线程
  • 数据库查询已优化,使用索引字段

🌐 可访问性

  • GitHub 按钮包含适当的 ARIA 标签
  • 键盘可导航和操作
  • 提供清晰的错误提示信息

📖 文档

  • 文档已更新(README 文件)
  • 添加了配置指南和部署说明
  • 更新了 API 认证相关文档

🔄 数据库更改

  • 包含数据库迁移脚本
  • 迁移向后兼容
  • 迁移已在本地测试

数据库变更详情:

  • 在 users 表中添加 githubUserId VARCHAR(255) NULL 字段
  • 添加唯一索引确保 GitHub ID 唯一性

🚀 部署说明

  • 需要配置 GitHub OAuth App
  • 需要设置环境变量 GITHUB_CLIENT_IDGITHUB_CLIENT_SECRET
  • 需要运行数据库迁移

部署检查清单

  1. 在 GitHub Developer Settings 中创建 OAuth App
  2. 配置正确的回调 URL
  3. 设置环境变量
  4. 运行数据库迁移命令
  5. 验证 OAuth 流程正常工作

✅ 检查清单

  • 我的代码遵循项目的样式指南
  • 我已对自己的代码进行自我审查
  • 我已为代码添加注释,特别是在 OAuth 流程关键部分
  • 我已对文档进行相应更改
  • 我的更改不会产生新的警告
  • 我已添加证明功能正常的测试
  • 新的和现有的单元测试都在本地通过我的更改

🔗 相关 Issues/PRs

👥 审查员

@wuhaoworld

📝 其他说明

  • OAuth 流程遵循最佳实践,包含 PKCE 支持
  • 支持现有用户账户与 GitHub 账户的关联
  • 提供了完整的错误处理和日志记录
  • 包含速率限制和防滥用机制

审查员审查指南:

  • 重点审查 OAuth 安全实现
  • 验证数据库迁移脚本的正确性
  • 测试多浏览器兼容性
  • 确认环境变量配置说明清晰完整
  • 验证错误处理边界情况

h7ml and others added 10 commits September 17, 2025 12:29
- 在智能体管理和发现页面中引入 BackToTop 组件,提升用户体验
- 优化页面布局,确保在不同设备上显示良好
- 更新国际化文本,增强多语言支持
- 在 .env.example 中添加 GitHub 登录相关的环境变量配置
- 在 README.md 和 README_EN.md 中添加 GitHub 登录的说明和配置指南
- 新增 GitHub 登录的 OAuth 配置和用户信息处理逻辑
- 添加 GitHub 登录按钮组件和相应的登录页面集成
- 在数据库中增加 githubUserId 字段用于存储 GitHub 用户 ID
- 更新 auth.ts 文件以支持 GitHub 登录
- 在 AuthProviderConfig 组件中添加 GitHub 登录配置项
- 创建 GitHubSettingsModal 组件用于显示 GitHub OAuth 配置
- 添加 GitHub 登录状态显示和配置指南
- 支持在管理后台查看 GitHub OAuth 配置状态

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
- 修复环境变量格式,移除多余引号
- 统一登录回调 URL 为 /chat
- 添加 GitHub OAuth 管理界面完整国际化
- 优化 NextAuth 配置,使用内置 GitHub 提供商
- 添加调试模式支持
本次提交实现了一个完全动态的OAuth 2.0集成系统,支持通过后台管理界面
配置任意OAuth标准提供商,并在登录页面动态显示。

主要功能特性:
- 🔧 动态OAuth提供商配置系统,支持任意OAuth 2.0标准实现
- 🎛️ 完整的后台管理界面,支持增删改查OAuth提供商
- 🔐 登录页面动态显示已配置的OAuth提供商
- 🌐 完整的国际化支持(中英双语)
- 🔒 Client ID唯一性约束确保第三方接入安全
- 📝 灵活的用户信息字段映射配置
- 🎨 可自定义的OAuth按钮样式和排序
- 🔄 实时缓存管理和NextAuth.js v5兼容

技术实现:
- 新增oauth_providers数据表及完整schema设计
- 实现动态提供商加载机制与NextAuth兼容性
- 创建RESTful API接口支持OAuth提供商CRUD操作
- 开发React Server Components和Client Components
- 统一类型定义system消除重复接口
- 添加数据库seed脚本和环境配置示例

文件变更:
- 23个文件修改,新增2160行代码
- 包含完整的前端UI、后端API、数据库schema
- 配置文档、类型定义、国际化资源
- 将 iconUrl、buttonText 和 buttonColor 属性的类型从可选类型改为可为 null 的类型
- 这种改动可以提供更明确的数据存在性信息,避免在使用时进行不必要的空值检查
修复OAuth系统中的各种TypeScript类型不匹配问题:

类型修复:
- 更新OAuthProvider接口字段类型从optional转为null类型
- 修复OAuthProviderDisplay接口匹配数据库schema
- 处理UI组件中的null值渲染和样式问题
- 修复NextAuth配置中的async providers兼容性问题

具体变更:
- types/oauth.ts: 统一字段类型为string|null匹配数据库
- app/admin/oauth/page.tsx: 修复按钮颜色null值和placeholder类型
- app/auth/providers/dynamic-oauth.ts: 添加checks数组类型断言
- auth.ts: 移除async providers配置改为静态缓存方式
- app/api/admin/oauth-providers/[id]/route.ts: 安全处理clientSecret null值

确保所有TypeScript类型检查通过,构建成功完成。
- 为OAuth提供商模板API路由添加dynamic='force-dynamic'配置,解决Next.js静态渲染错误
- 补充英文翻译文件中缺失的Admin.OAuth国际化内容
- 完善OAuth管理页面的完整双语支持

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
@h7ml h7ml closed this Sep 17, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant