
수강중인 강의 : 코딩애플 NextJS
로그인 시 다른 곳의 개인정보 권한을 대여한다. ex) 구글에게 유저정보에 대한 접근 권한을 위임받는다.
Next에서는 NextAuth.js라는 라이브러리가 존재한다.
이를 이용하면 소셜 로그인, JWT 토큰, Session, DB Adapter 방식 등 모두 이용 가능하다.
단, 아이디, 비밀번호를 이용한 로그인 시에는 세션 방식은 사용 불가능하고, 토큰 방식으로만 이용할 수 있다. 보안 이슈를 막기 위함이라고 한다..

이후 New OAuth App을 누르고, name, URL을 적어준다.
이 때 개발 환경이라면 Homepage URL과 Authorization callback URL에 모두 http://localhost:3000을, 배포된 환경이 있다면 해당 URL을 적어준다.

이후 생성 시 발급되는 Client ID와, Generate a new client secret를 눌러 암호를 잘 저장해두자.

이후 Next-Auth 세팅을 위해
npm install nextauth 입력,
이후 root/pages/api/auth/[...nextauth].js
위와 같은 위치에 폴더 및 파일을 생성한다.
// [...nextauth].js
import NextAuth from "next-auth";
import GithubProvider from "next-auth/providers/github";
export const authOptions = {
providers: [
GithubProvider({
clientId: 'Github에서 발급받은 ID',
clientSecret: 'Github에서 발급받은 Secret',
}),
],
secret : 'jwt생성시 쓸 암호'
};
export default NextAuth(authOptions);
이 때 jwt 생성 시 쓰는 암호에는 복잡한 문자열을 알아서 입력해주면 된다. 나는 1q2w3e4r!로 적었다.
이후 간단한 로그인 버튼을 만들어주자.
// LoginBtn.tsx
"use client";
import { signIn } from "next-auth/react";
export default function LoginBtn() {
return (
<button
onClick={() => {
signIn();
}}
>
로그인
</button>
);
}
로그인 시에는 signIn을, 로그아웃 시에는 signOut을 import하여 사용해주면 된다.
이후 정보가 잘 받아와졌는지 확인하기 위해
let session = await getServerSession(authOptions);
console.log(session);
session은 다음과 같다.
{
user: {
name: 'Donghyun Hwang',
email: '-----@soongsil.ac.kr',
image: 'https://avatars.githubusercontent.com/u/95581482?v=4'
}
}
나의 깃허브 정보들이 잘 넘어와진걸 볼 수 있다.
백엔드 팀과 리액트 + 구글 로그인 + JWT토큰 방식으로 OAuth를 구현하다 많이 헤맸던 기억이 난다. 그 과정에서 알게 됐던 것들 덕분에 강의를 들으며 복습하는 기분이었고, 직접 Next + 세션 혹은 토큰 방식으로 로그인을 구현하는 것에 기대를 가지고 있다.