프로그래밍/FrontEnd

Next.js - NextAuth V4 - 카카오 로그인

y_o_u__b 2024. 8. 14. 09:48

NextAuth.js는 Next.js 애플리케이션에 인증 기능을 간편하게 추가할 수 있는 라이브러리이다. 사용자 인증은 많은 웹 애플리케이션에서 중요한 부분을 차지하는데, NextAuth를 사용하면 인증 관련 복잡한 작업을 간단하게 처리할 수 있다.

1. NextAuth.js 소개

NextAuth.js는 다양한 인증 제공자를 지원하며, 쉽게 설정할 수 있는 인증 솔루션을 제공한다. 기본적으로 OAuth, 이메일 로그인, JWT(JSON Web Token) 등을 지원하며, 사용자 인증 및 세션 관리를 간편하게 처리할 수 있다.

 

2. NextAuth.js 설치

NextAuth.js와 관련된 패키지를 설치 (4.24.7 버전으로 코드 작성)

npm install next-auth

3. 환경 변수 설정

.env.local 파일을 프로젝트 루트 디렉토리에 생성 후 환경 변수를 추가

  • 루트 디렉토리 : package.json 파일과 같은 위치
KAKAO_CLIENT_ID=your-kakao-client-id
KAKAO_CLIENT_SECRET=your-kakao-client-id

4. NextAuth.js 설정

NextAuth를 사용하려면 src/pages/api/auth/[...nextauth].js 파일을 생성하여 인증 설정을 추가해야 한다.
이 파일은 NextAuth의 API 라우트로 사용된다.

import NextAuth from "next-auth/next";
import KakaoProvider from "next-auth/providers/kakao";

export const authOptions = {
    providers: [
        KakaoProvider({
            clientId: process.env.KAKAO_CLIENT_ID,
            clientSecret: process.env.KAKAO_CLIENT_SECRET
        })
    ],

    // 원하는 데이터를 선별하는 callback
    callbacks: {
        async session({ session, user, token }) {
            if(token) {
                session.user.profile_image = token.profile_image
                session.user.thumbnail_image_url = token.thumbnail_image_url
                session.user.id = token.id
            }
            return session
        },
        async jwt({ token, user, account, profile, isNewUser }) {
            if (account) {
                token.profile_image = profile.properties.profile_image
                token.thumbnail_image_url = profile.properties.thumbnail_image
            }
            return token
        }
    }

}

export default NextAuth(authOptions)

5. 데이터 가져오기

1. Add API route : <SessionProvider />

2. Client Side - Add React Hook : useSession()

3. Server Side - API Route : getServerSession()