脸书

获取你的 Facebook 凭证

要使用 Facebook 登录,你需要一个客户端 ID 和客户端密钥。你可以从 Facebook 开发者门户 获取。 选择你的应用,进入 应用设置 > 基本信息,找到以下内容:

  • 应用 ID:这是你的 clientId
  • 应用密钥:这是你的 clientSecret

避免在客户端代码(例如前端应用)中暴露 clientSecret,因为它是敏感信息。

请确保在本地开发时将重定向 URL 设置为 http://localhost:3000/api/auth/callback/facebook。在生产环境中,你应该将其设置为你的应用的 URL。如果你更改了身份验证路由的基础路径,你也应该相应地更新重定向 URL。

配置提供程序

要配置提供程序,你需要导入该提供程序并将其传递给身份验证实例的 socialProviders 选项。

auth.ts
import { betterAuth } from "better-auth"

export const auth = betterAuth({
    socialProviders: {
        facebook: { 
            clientId: process.env.FACEBOOK_CLIENT_ID as string, 
            clientSecret: process.env.FACEBOOK_CLIENT_SECRET as string, 
        }, 
    },
})

BetterAuth 还支持企业版 Facebook 登录,你只需提供 configId,该 ID 可在 Facebook Login For Business > Configurations 中找到,同时提供你的 clientIdclientSecret。请注意,应用必须是企业应用,并且由于 BetterAuth 需要获取电子邮件地址和账户 ID,配置必须是“用户访问令牌”(User access token)类型。“系统用户访问令牌”(System-user access token)不受支持。

使用 Facebook 登录

要使用 Facebook 登录,你可以使用客户端提供的 signIn.social 函数。signIn 函数接受一个包含以下属性的对象:

  • provider:要使用的提供商,应设置为 facebook
auth-client.ts
import { createAuthClient } from "better-auth/auth-client"
const authClient = createAuthClient()

const signIn = async () => {
    const data = await authClient.signIn.social({
        provider: "facebook"
    })
}

额外配置

【Additional Configuration】

范围

【Scopes】

默认情况下,Facebook 提供基本的用户信息。如果你需要额外的权限,可以在你的身份验证配置中指定范围:

【By default, Facebook provides basic user information. If you need additional permissions, you can specify scopes in your auth configuration:】

auth.ts
export const auth = betterAuth({
    socialProviders: {
        facebook: {
            clientId: process.env.FACEBOOK_CLIENT_ID as string,
            clientSecret: process.env.FACEBOOK_CLIENT_SECRET as string,
            scopes: ["email", "public_profile", "user_friends"], // Overwrites permissions
            fields: ["user_friends"], // Extending list of fields
        },
    },
})

附加选项:

  • scopes:访问基本账户信息(覆盖)。
    • 默认值:"email", "public_profile"
  • fields:扩展要从 Facebook 用户资料中检索的字段列表(赋值)。
    • 默认值:"id", "name", "email", "picture"

【Additional options:

  • scopes: Access basic account information (overwrites).
    • Default: "email", "public_profile"
  • fields: Extend list of fields to retrieve from the Facebook user profile (assignment).
    • Default: "id", "name", "email", "picture"

使用 ID 或访问令牌通过 Facebook 登录

【Sign In with Facebook With ID or Access Token】

要使用 ID 令牌通过 Facebook 登录,你可以使用 signIn.social 函数传递 ID 令牌。

【To sign in with Facebook using the ID Token, you can use the signIn.social function to pass the ID Token.】

当你在客户端拥有来自 Facebook 的 ID 令牌并希望用它在服务器端登录时,这很有用。

【This is useful when you have the ID Token from Facebook on the client-side and want to use it to sign in on the server.】

如果提供了 ID 令牌,将不会进行重定向,用户将直接登录。

对于有限登录,你需要传递 idToken.token,仅使用 accessToken 时,你需要同时传递 idToken.accessTokenidToken.token,因为 (#1183)[https://github.com/better-auth/better-auth/issues/1183]。

【For limited login, you need to pass idToken.token, for only accessToken you need to pass idToken.accessToken and idToken.token together because of (#1183)[https://github.com/better-auth/better-auth/issues/1183].】

auth-client.ts
const data = await authClient.signIn.social({
    provider: "facebook",
    idToken: {  
        ...(platform === 'ios' ?
            { token: idToken }  
            : { token: accessToken, accessToken: accessToken }), 
    },
})

有关可用权限的完整列表,请参阅 权限参考

【For a complete list of available permissions, refer to the Permissions Reference.】

On this page