✨ 들어가기
NextAuth.js는 Next.js 애플리케이션을 위한 Social 로그인을 쉽게 관리할 수 있는 라이브러리
입니다 .
✨ 설치하기
yarn add next-auth
✨ 폴더구조 세팅하기
└── .env
└── 📁 pages
├── 📁 api
│ └── 📁 auth
│ └── [...nextauth].ts
├── _app.tsx
└── _document.tsx
✨ 환경변수 설정하기
네이버, 카카오, 구글 로그인 총 3개의 소셜 로그인을 진행할 예정이므로 이에대한 개발자 등록을 진행한 뒤
각각에 해당하는 ID or Key / Secrect 을 환경변수로 설정해준다.
NEXT_PUBLIC_KAKAO_API_KEY=
NEXT_PUBLIC_KAKAO_JS_KEY=
NEXT_PUBLIC_KAKAO_SECRECT=nori
NEXT_PUBLIC_NAVER_ID=
NEXT_PUBLIC_NAVER_SECRET=
NEXT_PUBLIC_GOOGLE_CLIENT_ID=
NEXT_PUBLIC_GOOGLE_CLIENT_SECRET=
1️⃣ Kakao
Kakao Developers 👈 카카오 개발자 센터로 들어간다.
2️⃣ Naver
Naver Developers. 👈 네이버 개발자 센터로 들어간다.
3️⃣ Google
이후에 클라이언트 ID 와 클라이언트 보안 비밀이 생성되므로 이를 .env 파일에 넣어주면 완료 !
✨ SessionProvider 적용하기
👇 각각의 소셜로그인에 대한 정보를 가져오기 위해서 SessionProvider를 적용해야 한다.
import { Global, ThemeProvider } from '@emotion/react';
import type { AppProps } from 'next/app';
import { RecoilRoot } from 'recoil';
import { Header } from '../components/common';
import GlobalStyle, { resetStyle } from '../styles/globalStyle';
import theme from '../styles/theme';
import { SessionProvider } from 'next-auth/react';
export default function App({ Component, pageProps }: AppProps) {
return (
<RecoilRoot>
<ThemeProvider theme={theme}>
<Global styles={resetStyle} />
<Global styles={GlobalStyle} />
<Header />
<SessionProvider session={pageProps.session}>
<Component {...pageProps} />
</SessionProvider>
</ThemeProvider>
</RecoilRoot>
);
}
✨ NextAuth 적용하기
👇 소셜 로그인으로 Kakao, Naver, Google 을 사용할 것이므로 이를 사용하기 위해 provider를 pages/api/auth/[...nextauth].ts 에 정의해준다.
import NextAuth from 'next-auth';
import GoogleProvider from 'next-auth/providers/google';
import NaverProvider from 'next-auth/providers/naver';
import KakaoProvider from 'next-auth/providers/kakao';
export default NextAuth({
providers: [
KakaoProvider({
clientId: `${process.env.NEXT_PUBLIC_KAKAO_API_KEY}`,
clientSecret: `${process.env.NEXT_PUBLIC_KAKAO_SECRECT}`,
}),
NaverProvider({
clientId: `${process.env.NEXT_PUBLIC_NAVER_ID}`,
clientSecret: `${process.env.NEXT_PUBLIC_NAVER_SECRET}`,
}),
GoogleProvider({
clientId: `${process.env.NEXT_PUBLIC_GOOGLE_CLIENT_ID}`,
clientSecret: `${process.env.NEXT_PUBLIC_GOOGLE_CLIENT_SECRET}`,
}),
],
});
✨ Social Login 사용하기
👇 pages/login.tsx 에서 소셜 로그인을 사용하고자 한다.
Kakao, Naver, Google Provider를 연결하였으므로 이는 singIn(소셜이름) 함수로 호출하여 사용하면 된다.
import {
ImgKakaoLogo,
ImgGoogleLogo,
ImgNaverLogo,
} from '../public/assets/images';
import Image from 'next/image';
import styled from '@emotion/styled';
import { signIn, signOut, useSession } from 'next-auth/react';
export default function login() {
const { data, status } = useSession();
console.log(data?.user);
return (
<StLoginWrapper>
<Image
src={ImgNaverLogo}
width={56}
height={56}
style={{ padding: '1.5rem' }}
onClick={() => signIn('naver')}
/>
<Image
src={ImgKakaoLogo}
width={56}
height={56}
style={{ padding: '1.5rem' }}
onClick={() => signIn('kakao')}
/>
<Image
src={ImgGoogleLogo}
width={56}
height={56}
style={{ padding: '1.5rem' }}
onClick={() => signIn('google')}
/>
</StLoginWrapper>
);
}
const StLoginWrapper = styled.section`
display: flex;
justify-content: center;
align-items: center;
`;
💛 결론
Next.js 에서 소셜 로그인을 편리하게 해주는 next-auth 라이브러리로 회원가입 및 로그인이 아주 편리해졌다.
더불어 로그인 화면을 커스텀해서 사용할 수 있다는 것 또한 큰 장점으로 보인다.
'WEB > Next.js' 카테고리의 다른 글
Refine 이관 작업 ( feat. 중고나라 - 셀러지원센터 ) (1) | 2024.09.15 |
---|---|
이미지 최적화로 성능 개선하기 ( feat. FEW ) (0) | 2024.08.23 |
Link 태그와 SEO (0) | 2023.09.26 |
Next.js - V13 (0) | 2022.11.02 |