개발자

Nextjs app router middleware + token 여부에 따른 리다이렉트

2024년 03월 20일조회 715

안녕하세요, next.js로 팀 프로젝트 진행 중 궁금한 것이 생겨 질문드립니다. next.js의 middleware.ts를 이용하여 모든 라우터에 접근할 때마다 유저 인증 토큰을 확인 후, 토큰이 없으면 /login 페이지로, 토큰이 있다면 원하는 페이지로 이동할 수 있도록 처리하길 원합니다. 유저 토큰은 로그인 시, access token을 body로 내려 받아 전역 utils 파일에 클래스 형태로 저장하고 있고, refresh token은 쿠키로 내려 받아 필요할 때마다 토큰 재발급 요청을 보낼 수 있도록 설계하고 있어요. 그런데 middleware.ts에서 전역으로 관리하는 토큰에 접근이 불가능한 것 같더라구요.. accessToken을 쿠키로 관리하지 않으면 미들웨어에서 토큰에 접근하는 방법이 아예 없는 것일까요? 아니면 제가 뭔가 단단히 착각하고 있는 것이라면 도움을 요청하고 싶습니다! 감사합니다🙇‍♂️

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

답변 2

profile picture

익명

작성자

2024년 03월 20일

토큰 로직은 아래와 같습니다!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// root/utils/token.ts
class AuthToken {
  private _token: string;

  constructor() {
    this._token = '';
  }

  getToken() {
    console.log('get token', this._token); // middleware에서는 빈 문자열 출력

    return this._token;
  }

  setToken(token: string) {
    this._token = token;
    console.log(this._token, 'set token'); // 로그인 시 token 정상적으로 들어옴
  }
}

export const authToken = new AuthToken();
ㄷㅇ님의 프로필 사진

next.js의 middleware는 서버에서 실행되는 것이라 브라우저의 로컬 저장소에 접근할 수 없습니다. 토큰 저장 장소를 쿠키로 수정하시거나 전역상태를 유지하시려면 client에서 라우트가드를 설정하셔야 할 거에요

profile picture

익명

작성자

2024년 03월 20일

그렇군요, 답변 감사합니다!! 그런데 궁금한 점이, access token, refresh token 모두 쿠키에 저장해도 secure, httpOnly 옵션만 잘 적용해주면 보안 상 큰 문제가 되지 않을까요?

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

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

또는

이미 회원이신가요?

목록으로
키워드로 질문 모아보기

실무, 커리어 고민이 있다면

새로운 질문 올리기

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