GitHub

GitHub 提供者的设置和使用。

获取 GitHub 凭证

要使用 GitHub 登录,你需要一个客户端 ID 和客户端密钥。你可以从 GitHub 开发者门户 获取它们。

确保将重定向 URL 设置为 http://localhost:3000/api/auth/callback/github,用于本地开发。生产环境中,应将其设置为应用程序的 URL。如果更改了认证路由的基本路径,需要相应地更新重定向 URL。

重要:你必须在 GitHub 应用中包含 user:email 范围。详见下文。

配置提供者

要配置提供者,你需要导入该提供者并将其传递给认证实例的 socialProviders 选项。

auth.ts
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。
auth-client.ts
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 应用,你需要额外完成一项设置,即开启读取用户邮箱的权限:

  1. 创建应用后,进入 权限和事件 > 账户权限 > 电子邮件地址 并选择“只读”(Read-Only)

  2. 保存更改。

这样就可以了!现在你可以复制应用的客户端 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 那样在短时间内过期。