# Discord (/docs/authentication/discord)

Discord 提供程序的设置和使用。



<Steps>
  <Step>
    ### 获取 Discord 凭证 [#获取-discord-凭证]

    要使用 Discord 登录，您需要客户端 ID 和客户端密钥。您可以从 [Discord 开发者门户](https://discord.com/developers/applications) 获取它们。

    请确保将重定向 URL 设置为 `http://localhost:3000/api/auth/callback/discord`，用于本地开发。对于生产环境，您应将其设置为应用程序的 URL。如果更改了认证路由的基本路径，您应该相应地更新重定向 URL。
  </Step>

  <Step>
    ### 配置提供程序 [#配置提供程序]

    要配置提供程序，您需要导入提供程序并将其传递给认证实例的 `socialProviders` 选项。

    ```ts title="auth.ts" 
    import { betterAuth } from "better-auth"

    export const auth = betterAuth({ 
        socialProviders: {
            discord: { // [!code highlight]
                clientId: process.env.DISCORD_CLIENT_ID as string, // [!code highlight]
                clientSecret: process.env.DISCORD_CLIENT_SECRET as string, // [!code highlight]
            }, // [!code highlight]
        },
    })
    ```

    <Callout>
      对于仅有手机号的账户，即使授予了 `email` 范围，Discord 也会返回 `email: null`。请参阅 [处理没有邮箱的提供程序](/docs/concepts/oauth#处理不提供邮箱的提供商)，了解推荐的 `mapProfileToUser` 回退方案。
    </Callout>
  </Step>
</Steps>

## 使用 [#使用]

### 使用 Discord 登录 [#使用-discord-登录]

要使用 Discord 登录，您可以使用客户端提供的 `signIn.social` 函数。`signIn` 函数接受一个包含以下属性的对象：

* `provider`：要使用的提供程序。应设置为 `discord`。

```ts title="auth-client.ts"
import { createAuthClient } from "better-auth/client"

const authClient = createAuthClient()

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

## 选项 [#选项]

有关所有社交提供程序支持的完整选项列表，请查看 [提供程序选项](/docs/concepts/oauth#提供商选项)。

### 机器人权限（可选） [#机器人权限可选]

如果在 Discord OAuth 中使用了 `bot` 范围，可以使用 `permissions` 选项指定机器人权限。它可以是一个按位值（例如 `2048 | 16384` 表示发送消息和嵌入链接），或一个特定的权限值（例如 `16384` 表示嵌入链接）。

```ts title="auth.ts" 
import { betterAuth } from "better-auth"

export const auth = betterAuth({ 
    socialProviders: {
        discord: {
            clientId: process.env.DISCORD_CLIENT_ID as string,
            clientSecret: process.env.DISCORD_CLIENT_SECRET as string,
            permissions: 2048 | 16384, // 发送消息 + 嵌入链接 // [!code highlight]
        }, 
    },
})
```

**注意：** `permissions` 参数仅在 OAuth2 范围中包含 `bot` 时才有效。有关 Discord 机器人权限的更多信息，请查阅 [Discord 机器人权限](https://discord.com/developers/docs/topics/permissions)。

