NextAuth.js란 ?
NextAuth.js는 OAuth, 이메일 인증, 크리덴셜 기반 인증 등 다양한 인증 방식을 지원하며, 사용자 세션 관리, 보안 강화 기능을 제공합니다.
특히 Next.js와의 궁합이 좋아 빠르고 쉽게 인증을 통합할 수 있습니다.
프로젝트 설정
먼저 Next.js와 TypeScript 프로젝트를 초기화하고 NextAuth.js를 설치하겠습니다.
프로젝트 초기화
npx create-next-app@latest my-nextauth-app --typescript
cd my-nextauth-app
npm install next-auth @types/next-auth
NextAuth.js 설정
NextAuth.js를 설정하려면 /pages/api/auth/[...nextauth].ts 파일을 생성해야 합니다.
이 파일은 인증 관련 API 핸들러를 정의하는 곳입니다.
/pages/api/auth/[...nextauth].ts
import NextAuth, { AuthOptions } from "next-auth";
import GoogleProvider from "next-auth/providers/google";
export const authOptions: AuthOptions = {
providers: [
GoogleProvider({
clientId: process.env.GOOGLE_CLIENT_ID || "",
clientSecret: process.env.GOOGLE_CLIENT_SECRET || "",
}),
],
callbacks: {
async session({ session, token }) {
// 사용자 세션에 토큰 추가
session.user.id = token.sub;
return session;
},
async jwt({ token, user }) {
// JWT에 사용자 정보 추가
if (user) {
token.id = user.id;
}
return token;
},
},
secret: process.env.NEXTAUTH_SECRET,
};
export default NextAuth(authOptions);
환경 변수 설정
Google OAuth를 사용하려면 클라이언트 ID와 비밀 키를 설정해야 합니다.
이를 위해 Google Cloud Console에서 프로젝트를 생성하고 OAuth 클라이언트를 생성합니다.
이후, .env.local 파일에 다음 내용을 추가합니다
GOOGLE_CLIENT_ID=your-google-client-id
GOOGLE_CLIENT_SECRET=your-google-client-secret
NEXTAUTH_SECRET=your-nextauth-secret
클라이언트에서 인증 상태 확인
NextAuth.js는 클라이언트에서 인증 상태를 확인하거나 로그인/로그아웃을 처리하는 데 필요한 훅과 함수를 제공합니다.
로그인 버튼 구현
// components/AuthButton.tsx
import { signIn, signOut, useSession } from "next-auth/react";
const AuthButton = () => {
const { data: session } = useSession();
if (session) {
return (
<div>
<p>안녕하세요, {session.user?.name}님!</p>
<button onClick={() => signOut()}>로그아웃</button>
</div>
);
}
return <button onClick={() => signIn("google")}>Google로 로그인</button>;
};
export default AuthButton;
_app.tsx에서 SessionProvider 추가
// pages/_app.tsx
import { SessionProvider } from "next-auth/react";
import type { AppProps } from "next/app";
export default function App({
Component,
pageProps: { session, ...pageProps },
}: AppProps) {
return (
<SessionProvider session={session}>
<Component {...pageProps} />
</SessionProvider>
);
}
'개발 공부 > React' 카테고리의 다른 글
| React.memo (2) (0) | 2025.01.24 |
|---|---|
| React.memo (1) (1) | 2025.01.22 |
| NextAuth.js 사용자 인증 로직 (3) NextAuth 동작 방식 (0) | 2025.01.19 |
| NextAuth.js 사용자 인증 로직 (2) (1) | 2025.01.12 |
| NextAuth.js 사용자 인증 로직 (1) (0) | 2025.01.11 |