GitHub
GitHub 提供者的设置和使用。
获取 GitHub 凭证
要使用 GitHub 登录,你需要一个客户端 ID 和客户端密钥。你可以从 GitHub 开发者门户 获取它们。
确保将重定向 URL 设置为 http://localhost:3000/api/auth/callback/github,用于本地开发。生产环境中,应将其设置为应用程序的 URL。如果更改了认证路由的基本路径,需要相应地更新重定向 URL。
重要:你必须在 GitHub 应用中包含 user:email 范围。详见下文。
配置提供者
要配置提供者,你需要导入该提供者并将其传递给认证实例的 socialProviders 选项。
import { betterAuth } from "better-auth"
export const auth = betterAuth({
socialProviders: {
github: {
clientId: process.env.GITHUB_CLIENT_ID as string,
clientSecret: process.env.GITHUB_CLIENT_SECRET as string,
},
},
})使用 GitHub 登录
要使用 GitHub 登录,可以使用客户端提供的 signIn.social 函数。signIn 函数接收一个包含以下属性的对象:
provider:要使用的提供者。应设置为github。
import { createAuthClient } from "better-auth/client"
const authClient = createAuthClient()
const signIn = async () => {
const data = await authClient.signIn.social({
provider: "github"
})
}使用说明
设置你的 GitHub 应用
GitHub 有两种应用类型:GitHub 应用和 OAuth 应用。
对于 OAuth 应用,无需执行特殊操作(只需按照上述步骤操作)。对于 GitHub 应用,你需要额外完成一项设置,即开启读取用户邮箱的权限:
-
创建应用后,进入 权限和事件 > 账户权限 > 电子邮件地址 并选择“只读”(Read-Only)
-
保存更改。
这样就可以了!现在你可以复制应用的客户端 ID 和客户端密钥!
如果你遇到 email_not_found 错误,通常是因为:(a)你创建了一个 GitHub App,但没有授予“Email addresses: Read-only”权限;或者(b)用户将其主邮箱设置为私密,在这种情况下 GET /user 会返回 email: null。有关推荐的 mapProfileToUser 回退方案,请参阅处理无邮箱提供者;用户的私密地址也可通过 /user/emails 获取。
为什么我没有刷新令牌?
GitHub 不为 OAuth 应用发放刷新令牌。对于常规 OAuth 应用,GitHub 发放的访问令牌除非用户撤销、应用撤销,或者一年内未使用,否则将一直有效。
不需要刷新令牌,是因为访问令牌不像 Google 或 Discord 那样在短时间内过期。