src/lib/plugins/auth/github.ts
GitHub OAuth 认证插件,支持通过 GitHub 账号登录。
概述
该插件基于 NextAuth.js 的 GitHub Provider,集成 GitHub OAuth 认证流程。
主要导出
githubPlugin
认证插件实例,实现了 AuthPlugin 接口。
import { githubPlugin } from "@/lib/plugins/auth/github";
功能特性
用户信息映射
从 GitHub 用户资料中提取以下信息:
| GitHub 字段 | 映射字段 | 说明 |
|---|---|---|
id | id | GitHub 用户 ID |
name 或 login | name | 用户显示名称 |
email | email | 用户邮箱 |
avatar_url | image | 头像 URL |
login | username | GitHub 用户名(用于显示) |
login | githubUsername | GitHub 用户名(不可变,用于贡献者归属) |
用户名处理
- 使用 GitHub
login作为用户名 - 存储两份:
- username - 可修改的显示用户名
- githubUsername - 不可变的原始 GitHub 用户名(用于贡献者归属追踪)
环境变量
需要配置以下环境变量:
# GitHub OAuth App 配置
GITHUB_CLIENT_ID=your_client_id
GITHUB_CLIENT_SECRET=your_client_secret
获取方式
- 登录 GitHub
- 进入 Settings → Developer settings → OAuth Apps
- 点击 "New OAuth App"
- 填写应用信息:
- Authorization callback URL: http://localhost:3000/api/auth/callback/github(开发环境)
- 生产环境使用实际域名
使用方式
前端登录调用
import { signIn } from "next-auth/react";
await signIn("github");
配置启用
在 prompts.config.ts 中启用:
export default defineConfig({
auth: {
providers: ["github", "credentials"],
allowRegistration: true,
},
// ...
});
用户创建流程
- 用户点击 GitHub 登录按钮
- 重定向到 GitHub 授权页面
- 用户授权后,GitHub 回调到应用
- NextAuth 处理 OAuth 回调
- 调用自定义 Prisma Adapter 创建用户
- 用户名处理:
- 优先使用 GitHub login 作为用户名
- 检查是否存在同名的无主账户
- 如果存在,认领该账户
- 如果不存在,创建新用户
注意事项
- GitHub 用户名被存储为不可变字段,用于贡献者归属
- 支持认领预创建的无主账户(用于贡献者关联)
- 如果用户修改了 GitHub 用户名,
githubUsername保持不变 - 需要用户邮箱是公开的,或在 OAuth 授权时允许访问
- 生产环境必须使用 HTTPS 回调 URL