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