Skip to content
Migrating from NextAuth.js v4? Read our migration guide.

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

또는 authorizationparams 객체에 옵션을 전달하여 로그인할 때마다 항상 리프레시 토큰이 제공되도록 할 수 있습니다. 하지만 이 경우 모든 사용자가 로그인할 때마다 애플리케이션에 접근 권한을 부여할지 확인하는 메시지를 보게 됩니다.

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`가 없는 다른 프로바이더에 대해서는 다른 검증을 수행
    },
  },
})
Auth.js © Balázs Orbán and Team - 2025