22sook00 logo
SookDev

Next.js Auth

tag
next.js
library
auth
date
Dec 3, 2023

01_Next-auth 란?

✳️ 특징
  • 여러 인증 공급자 (구글,페이스북,깃헙) 등과 프로바이더 제공 . 설정만 해주면 국내 사용자인증도 사용 가능
  • 세션 기반 및 JWT (Json Web Tokens) 기반의 인증을 지원
  • 사용자 데이터베이스 통합 및 사용자 정의 프로필 필드 관리
  • 보안적으로 안전한 사용자 인증을 위한 설정 및 옵션
코드 예시
//pages/api/auth/[...nextauth].js (server) import NextAuth from 'next-auth' import GoogleProvider from 'next-auth/providers/google' const NextAuth = () => { providers:[ GoogleProvider({ clientId:process.env.GOOGLE_ID, clientSecret:process.env.GOOGLE_SECRET }), //passwordless & email sign in EmailProvider({ server : process.env.MAIL_SERVER, from: 'NextAuth.js <no-reply@example@com>' }) ] }
//pages/index.js (client) import {useSession, signIn, signOut} from 'next-auth/react' const Component = () => { const {data:session} = useSession() if(session){ return <> Signed in as {session.user.email} <br/> <button onClick={()=>signOut()}>Sign out</button> </> } return <> Not signed in <br/> <button onClick={()=>signIn()}>Sign in</button> </> }
 
✳️ Next-auth 장점
  • 간단한 설정 : 직접 구현하는것에 비해 인증 설정이 매우 간단하다.
  • 다양한 인증 공급자 : 구글,페이스북,애플,네이버,카카오 등 수십개의 인증 공급자 통합 가능
  • 안전한 보안 : 보안관련 작업 (세션관리, JWT 생성, CSRF 방어 등) 자동처리
  • 확장성 :사용자 데이터베이스(prisma 같은)와의 통합을 지원
  • Next.js 와의 통합 : SSR, CSR 에서 원활하게 작동
 
✳️ Next-auth 사용자 인증방식 (+callback)
  • 주로 세션과 JWT 함께 사용하여 인증 작업 진행
    • 세션은 서버측에서 사용자정보를 안전하게 저장하고 관리하는데 사용
    • JWT 는 클라측에서 사용자인증을 관리하는데 사용
  • 다양한 콜백함수를 사용하여 사용자 인증 및 세션 관리 조정 가능
    • signIn(), signOut(), redirect() , session(로그인상태추적) , jwt(생성 및 검증)

02_Next-auth 세팅

프리즈마와 함께 사용하는 Nextauth
Nextauth 공식문서에 나온것과 같이 [...nextauth].ts 파일 내부에 내가 원하는 소셜 auth provider 를 넣을 수 있다.
모든 요청은 /api/auth/* (signin, callback,signout)를 통해 자동적으로 nextauth.ts 가 처리해준다.
.env 에는 미들웨어를 설정하는데 필요한 NEXTAUTH_SECRET 과 NEXT_URL 을 설정해주는데
여기서 NEXTAUTH_SECRET 는 임의의 스트링값을 넣으면 된다.
참고로 임의의 스트링값은 터미널에서 다음 코드로 랜덤생성할 수 있다.
openssl rand -base64 24
 
✳️ 프리즈마 어댑터 세팅
 
 
✳️ 미들웨어 세팅
로그인한 유저만 접근이 가능하도록 하기 위해 미들웨어를 세팅한다.
Next.js Middleware 를 사용하면 좀더 안전하게 NextAuth 를 사용할 수 있다 공식문서에 명시 되어있다.
 
 

03_구글로그인 테스트

구글 API key 생성하기
구글 콘솔에 들어가 새로운 프로젝트를 생성하고,
사용자 인증 정보에서 API 키와 OAuth Client API 키를 생성할 수 있다.
notion image
Oauth client API 키는 동의화면을 우선 선택하고 외부로 선택한다.
notion image
내가 사용자에게 받을 정보를 선택하는 부분이다.
가장 간단하게 이메일주소와 개인정보만 선택했다.
notion image
이후 구글계정 내에서 테스트사용자를 설정한 후 (네이버는 부적격하다고 알람이 나왔다.)
모든 과정을 끝내고 대시보드로 돌아가기 한 후, 다시 Oauth 클라이언트 ID 만들기에 들어가면
다음과 같이 승인된 자바스크립트 원본, 승인된 리디렉션 URI 를 입력하는 폼이 나온다.
승인된 자바스크립트 원본은 localhost:3000, 승인된 리디렉션 URI 는 Next-auth 공식홈페이지를 참고하여 작성한다.
(• For development: http://localhost:3000/api/auth/callback/google)
배포 후에는 호스트 부분을 수정해주면 된다.
notion image
이렇게 생성된 클라이언트아이디와 보안 비밀번호를 .env 에 저장하도록 한다.
notion image
 
 

 
notion image