跳至内容
从 NextAuth.js v4 迁移?阅读 我们的迁移指南.

Google 提供商

资源

设置

回调 URL

https://example.com/api/auth/callback/google

环境变量

AUTH_GOOGLE_ID
AUTH_GOOGLE_SECRET

配置

@/auth.ts
import NextAuth from "next-auth"
import Google from "next-auth/providers/google"
 
export const { handlers, auth, signIn, signOut } = NextAuth({
  providers: [Google],
})

备注

刷新令牌

Google 仅在用户首次登录时向应用程序提供刷新令牌。

要强制 Google 重新颁发刷新令牌,用户需要从其帐户中删除应用程序并重新登录:https://myaccount.google.com/permissions

或者,您也可以在 params 对象的 authorization 中传递选项,这将强制在登录时始终提供刷新令牌,但每次登录时都会要求所有用户确认是否希望授予您的应用程序访问权限。

如果您需要访问 Google 帐户的刷新令牌或访问令牌,并且您没有使用数据库来持久保存用户帐户,这可能是您需要执行的操作。

app/api/auth/[...nextauth]/route.ts
import Google from "next-auth/providers/google"
 
export const { handlers, auth, signIn, signOut } = NextAuth({
  providers: [
    Google({
      authorization: {
        params: {
          prompt: "consent",
          access_type: "offline",
          response_type: "code",
        },
      },
    }),
  ],
})

有关将代码交换为访问令牌和刷新令牌的更多信息,请参见 Google OAuth 文档

电子邮件已验证

Google 还会在 OAuth 配置文件中返回 email_verified 布尔属性。

您可以使用此属性来限制对特定域的已验证帐户的访问权限。

@/auth.ts
export const { handlers, auth, signIn, signOut } = NextAuth({
  callbacks: {
    async signIn({ account, profile }) {
      if (account.provider === "google") {
        return profile.email_verified && profile.email.endsWith("@example.com")
      }
      return true // Do different verification for other providers that don't have `email_verified`
    },
  },
})
Auth.js © Balázs Orbán 和团队 -2024