Nest.js JWT 미들웨어

dnslfkrh·2024년 11월 26일

app.module.ts에 적용

export class AppModule implements NestModule {
  configure(consumer: MiddlewareConsumer) {
    consumer
      .apply(YourMiddleware)
      .exclude(
        { path: 'auth/(.*)', method: RequestMethod.ALL }
      )
      .forRoutes('*'); // 모든 경로 적용
  }
}

token.middleware.ts 스크립트

@Injectable()
export class TokenMiddleware implements NestMiddleware {
    constructor(
        // service 또는 repository 의존성
    ) { }

    async use(req: Request, res: Response, next: NextFunction) {
        // 미들웨어 로직
    }
}

위와 같이 미들웨어를 적용할 수 있다.

개발 중 생긴 문제

  • access token을 재발급하기 위해 미들웨어를 만들었다.
  • 개발자 도구에서 access token을 제거하고 서버에 요청을 보내니 새로운access token이 잘 발급 되었다.
  • 그런데, 개발 도중 계속 access token 관련 오류가 발생했다.

access token이 만료되었다는 오류 메시지

  • 내가 한 테스트는 access token이 존재하지 않을 때를 가정한 테스트였다.
  • 오류의 원인은 만료된 access token.
  • 즉, access token이 존재는 하지만? 사용할 수 없는 상태가 된 것.

"!accessToken"과 "만료된 access token"은 다른 것이었다...

  • 이 차이를 인지하지 못하고 개발을 하니 만료된 상황에 대한 처리를 하지 않을 것이었다.

access token이 없을 때와 만료되었을 때 모두 새로운 access token을 재발급해줬다.

  • refresh token 갱신은 구현하지 않았다.
  • 처음 refresh token으로 access token을 갱신해 봤는데 개념을 처음 접했을 때 느낀 것보다는 간단하지만 구현이 생각보다 어려웠다?
  • 토큰의 만료 개념을 확실하게 이해할 수 있었다.
profile
안녕하세요

0개의 댓글