跳至内容
从 NextAuth.js v4 迁移?阅读 我们的迁移指南.
指南配置 OAuth 提供商

配置 OAuth 提供商

覆盖默认提供商配置

对于内置提供商,通常您只需要指定客户端 ID 和客户端密钥,以及在 OIDC(OpenID Connect)情况下,还需要指定发行者。我们可以从环境变量中推断出这些信息。从环境变量中推断出这些信息.

如果您需要覆盖任何默认提供商配置选项,可以在提供商的函数调用中添加它们,它们将与我们的默认值深度合并。这意味着您只需要覆盖需要更改的部分选项。例如,如果您需要不同的范围,覆盖 authorization.params.scope 就足够了,而不是整个 authorization 选项。

例如,要覆盖提供商的默认 scope,您可以执行以下操作

./auth.ts
import NextAuth from "next-auth";
import Auth0 from "next-auth/providers/auth0";
 
export const { handlers, auth } = NextAuth({
  providers: [
    Auth0({ authorization: { params: { scope: "openid custom_scope" } } }),
  ],
});

另一个例子,profile 回调默认情况下将返回 nameemailpicture,但您可能想要从提供商返回更多信息。您返回的内容将用于在数据库中创建用户对象。

./auth.ts
import NextAuth from "next-auth";
import Auth0 from "next-auth/providers/auth0";
 
export const { handlers, auth } = NextAuth({
  providers: [
    Auth0({
      // You can also make calls to external resources if necessary.
      async profile(profile) {
        return {};
      },
    }),
  ],
});

使用您自己的提供商

💡

在从头开始创建之前,请先查看我们的内置 OAuth 提供商

我们支持任何符合OAuthOIDC 标准的提供商。首先将一个对象传递给providers 列表

./auth.ts
import NextAuth from "next-auth";
 
export const { handlers, auth } = NextAuth({
  providers: [{
    id: "my-provider", // signIn("my-provider") and will be part of the callback URL
    name: "My Provider", // optional, used on the default login page as the button text.
    type: "oidc", // or "oauth" for OAuth 2 providers
    issuer: "https://my.oidc-provider.com", // to infer the .well-known/openid-configuration URL
    clientId: process.env.AUTH_CLIENT_ID, // from the provider's dashboard
    clientSecret: process.env.AUTH_CLIENT_SECRET, // from the provider's dashboard
  }],
});

然后,在您的提供商仪表板中将回调 URL 设置为 https://app.com/{basePath}/callback/{id}

默认情况下,basePath 对于 Next.js 是 /api/auth,对于所有其他集成是 /auth。参见basePath

就是这样!🎉

添加新的内置提供商

如果您认为您的自定义提供商可能对其他人有用,我们鼓励您创建一个 PR 并将其添加到内置列表中。

创建提供商的文件

packages/core/src/providers 目录下创建一个新的 {provider}.ts 文件。

遵守我们的代码约定

内置提供商 作为指南,确保您的提供商遵守相同的代码约定,即

  • 使用 TypeScript
  • 使用命名的默认导出:export default function YourProvider
  • 导出定义提供商可用用户信息属性的 TypeScript interface
  • 添加必要的 JSDoc 注释/文档。例如,Auth0 提供商 是 OIDC 的一个很好的例子,GitHub 提供商 是 OAuth 提供商的一个例子。
  • 添加指向提供商的 API 参考/文档的链接,以便其他人能够了解如何设置此提供商

在 GitHub 问题下拉菜单中添加您的提供商

将新的提供商名称添加到提供商问题模板 中的 提供商类型 下拉菜单选项中

将徽标 {provider}.svg 添加到docs/static/img/providers 目录中。

PR 合并后,其他人也可以使用我们的任何集成来发现和使用此提供商。就是这样!🎉

Auth.js © Balázs Orbán 和团队 -2024