Apple

获取 OAuth 凭证

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

Apple 需要稍微复杂一些的设置来获取客户端密钥。你可以使用下面的指南来获取你的客户端密钥。

创建客户端密钥

配置提供商

要配置提供商,你需要将其添加到 auth 实例的 socialProviders 选项中。

auth.ts
import { betterAuth } from "better-auth"
 
export const auth = betterAuth({
    socialProviders: {
        apple: { 
            clientId: process.env.APPLE_CLIENT_ID as string, 
            clientSecret: process.env.APPLE_CLIENT_SECRET as string, 
            // 可选
            appBundleIdentifier: process.env.APPLE_APP_BUNDLE_IDENTIFIER as string, 
        }, 
    },
})

在原生 iOS 上,它不使用服务 ID 而是使用应用 ID(bundle id)作为客户端 ID,所以如果在 signIn.social() 中使用服务 ID 作为 clientId 并带有 idToken,它会抛出错误:JWTClaimValidationFailed: unexpected "aud" claim value。因此,当你想要使用 ID Token 通过 Apple 登录时,你需要提供 appBundleIdentifier。

使用方法

使用 Apple 登录

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

  • provider:要使用的提供商。应该设置为 apple
auth-client.ts
import { createAuthClient } from "better-auth/client"
const authClient =  createAuthClient()
 
const signIn = async () => {
    const data = await authClient.signIn.social({
        provider: "apple"
    })
}

使用 ID Token 通过 Apple 登录

要使用 ID Token 通过 Apple 登录,你可以使用 signIn.social 函数来传递 ID Token。

当你从客户端获取了 Apple 的 ID Token 并想在服务器上使用它来登录时,这很有用。

如果提供了 id token,将不会发生重定向,用户将直接登录。

auth-client.ts
    await authClient.signIn.social({
        provider: "apple",
        idToken: {
            token: // Apple ID Token,
            nonce: // Nonce(可选)
            accessToken: // 访问令牌(可选)
        }
    })

On this page