Google Provider
리소스
설정
Callback 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],
})
Notes
리프레시 토큰
Google은 사용자가 처음 로그인할 때만 애플리케이션에 리프레시 토큰을 제공합니다.
Google이 리프레시 토큰을 다시 발급하도록 강제하려면, 사용자가 자신의 계정에서 애플리케이션을 제거하고 다시 로그인해야 합니다: https://myaccount.google.com/permissions
또는 authorization
의 params
객체에 옵션을 전달하여 로그인할 때마다 항상 리프레시 토큰이 제공되도록 할 수 있습니다. 하지만 이 경우 모든 사용자가 로그인할 때마다 애플리케이션에 접근 권한을 부여할지 확인하는 메시지를 보게 됩니다.
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
라는 불리언(boolean) 속성을 반환합니다.
이 속성을 사용하면 특정 도메인의 인증된 계정을 가진 사람만 접근할 수 있도록 제한할 수 있습니다.
@/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 // `email_verified`가 없는 다른 프로바이더에 대해서는 다른 검증을 수행
},
},
})