개발자

Next.js(13.4.0) 모든 페이지에서 토큰 유/무 판단하기

2023년 10월 01일조회 520

현재 signup, signin, home, save, mypage 총 5개의 페이지가 있습니다. home, save, mypage에서 refresh-token의 존재 유/무에 따라서 signin 경로로 redirect 시키려고 합니다. 로그인을 하면 localStorage에 access-token 저장, browser cookie에 refresh-token이 저장됩니다. 로그인 후에 임의로 refresh-token 값을 지웠을 때, signin 경로로 redirect 시켜주기 위해 각 페이지에서 getServerSideProps를 사용하여 refresh-token의 존재 유/무를 판단하여 redirect를 시켜주고 있습니다. 현 상황처럼 각 페이지에서 인증을 처리하는 것이 아닌 모든 페이지에서 공통으로 인증을 처리하는 방법이 있는지 궁금하여 질문드립니다.

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.
profile picture
익명님의 질문

답변 1

itmaster님의 프로필 사진

Nextjs middleware 에서 가능합니다. https://nextjs.org/docs/app/building-your-application/routing/middleware 위부분에서 Using Cookies 제목 참고하시면 됩니다

profile picture

익명

작성자

2023년 10월 04일

감사합니다!!

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

AI 답변
커리어리 AI 봇 프로필 이미지

커리어리 AI 봇

GPT가 달아주는 답변입니다.

2023년 10월 01일

모든 페이지에서 토큰의 유/무를 판단하기 위해서는 _app.js 파일에서 처리할 수 있습니다. 이 파일은 Next.js 애플리케이션의 최상위 컴포넌트로서 모든 페이지 요청 시 호출됩니다. Custom App (_app.js 혹은 _app.tsx)에서 페이지 전환 시마다 로직을 수행할 수 있으므로, 이 곳에서 인증 확인 로직을 넣으면 됩니다. 다음은 샘플 코드입니다: ```jsx import { useEffect } from 'react'; import { useRouter } from 'next/router'; export default function MyApp({ Component, pageProps }) { const router = useRouter(); useEffect(() => { // fetch your cookie or token here const token = fetchTokenOrCookie(); if (!token) { router.push('/signin'); } }, [router]); return <Component {...pageProps} />; } ``` 일반적으로 클라이언트-사이드 인증 체크에는 useEffect를 사용하고, 서버-사이드 auth-check에는 getInitialProps 혹은 getServerSideProps를 사용합니다. 유의해야 할 점은, 위 예제와 같은 클라이언트 사이드 검증 방식을 사용하면 OAuth 플로우가 깨지거나 SEO 문제가 발생할 수 있다는 것입니다. 덧붙여서 _app 에서 getInitialProps 를 사용하면 자동 Static Optimization 이 꺼지게 되니 성능상 주의가 필요합니다.

목록으로

지금 가입하면 모든 질문의 답변을 볼 수 있어요!