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`
},
},
})