개발자
middleware 에서 토큰 인증에 따른 redirect 를 구현 할려고 합니다 제가 생각한 로직은 인증이 필요한 페이지는 accesstoken을 쿠키에서 받아오고 토큰이 없거나, 인증이 실패하면 login 페이지로 이동, 토큰이 만료된 경우에는 refresh 요청이후 accesstoken,refreshtoken 재발급 이후 원래 이동할려는 페이지로 이동 이렇게 생각중인데 다만 하나 걸리는게 middleware에서 refresh api 요청을 하는게 과연 올바를까? 궁금합니다 그럼에도 굳이 middleware 에서 할려는 이유는 page단 에서 처리할경우에는 결국에는 한번 그 페이지로 이동했다가 처리되는거라 깜빡이는 이슈가 생겨서 그렇습니다 보통 어떤식으로 처리하는지 궁금해요
답변 2
저는 middleware에서 refresh api 요청하는게 효율적잊 않다고 생각해요! 1. Refresh api 를 호출해도 쿠키를 업데이트 할 수 없음 2. 무한 루프의 가능성이 있음 3. edge runtime에서 실행되므로 부적절함 대신 미들웨어에서 accessToken을 확인하고 없으면 로그인 페이지로 리디렉트하는 방식이 더 효율적이라고 생각됩니다! 이때 깜박임을 해결하려면 next.js 의 버전이 13v 이하라면 getSeverSideProps 를 활용해보시고 14v 이상이라면 서버컴포넌트와 미들웨어, api 라우트를 조합하여 깜박임을 최소화하시고 로딩화면을 이용하시는게 효율적인 방법이라고 생각됩니다!
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
커리어리 AI 봇
GPT가 달아주는 답변입니다.
3월 16일
Next.js의 Middleware를 이용해 protected route를 처리하는 방법에 대한 질문에 대해 답변하겠습니다. 먼저, Next.js의 Middleware는 서버가 request-response 사이클에서 특정 코드를 실행하는 방법입니다. 사용자의 요청이 서버에 도착했을 때 예로 인증확인(예:JWT 추가 및 확인) 등을 할 수 있습니다. Indded, you are right. In a full-stack context, tokens often refreshed in middleware and it is a quite common practice to do so. And there is nothing wrong with making an API call for token refresh from your middleware if you may need to make the same checks on every protected page of your application. However, it's important to note that due to the nature of JavaScript executing on the client's browser after the page has rendered server-side, it might cause some unwanted effects such as "flashes" when redirecting unauthenticated users. To solve this issue one approach could be: 1. Create an API route (E.g., /api/refreshToken) which would handle refreshing of tokens. 2. In your middleware, check if the access token is expired. 3. If access token is expired: - Make fetch call from within middleware to /api/refreshToken and get the new access and refresh tokens. - Store new tokens in cookies, - Then redirect user to their intended path using `res.writeHead()` and `res.end()`. 4. Make sure this logic runs before rendering any component on protected routes. 필요한 경우 새로 고침 논리를 제거하고 대신 클라이언트 측에서 JWT 만료를 체크하는 것도 고려해볼 수 있습니다. 그러나 관점에 따라 이것이 "플래시"를 방지하는 가장 좋은 방법은 아닐 수 있습니다. Next.js의 서버측 렌더링(SSR)을 사용하여 로그인 상태를 처리하는 것이 더 나을 수 있습니다. 이 접근법에서는 페이지가 클라이언트에 첫 번째로 전송되기 전에 SSR 메서드 (`getServerSideProps` 또는 `getInitialProps`)에서 토큰 유효성 검사를 수행합니다. 아무튼, 이는 여러 접근법 중 하나일 뿐입니다. 해결책 선택은 지금 구축하고 있는 프로젝트와 해당 프로그램 요구 사항에 따라 달라집니다.
지금 가입하면 모든 질문의 답변을 볼 수 있어요!