개발자
현재 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를 시켜주고 있습니다. 현 상황처럼 각 페이지에서 인증을 처리하는 것이 아닌 모든 페이지에서 공통으로 인증을 처리하는 방법이 있는지 궁금하여 질문드립니다.
커리어리 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 이 꺼지게 되니 성능상 주의가 필요합니다.
지금 가입하면 모든 질문의 답변을 볼 수 있어요!