인프런 커뮤니티 질문&답변

jhreplay.lee님의 프로필 이미지

작성한 질문수

[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core

토큰 재발급 로직 코딩하기

[토큰 재발급 로직 코딩하기] 토큰 재발급 후 sub 정보 사라짐

23.11.12 12:08 작성

·

308

1

signToken(user: Pick<UsersModel, 'email' | 'id'>, isRefreshToken: boolean) {
        const payload = {
            email: user.email,
            sub: user.id,
            type: isRefreshToken ? 'refresh' : 'access',
        };

        return this.jwtService.sign(payload, {
            secret: JWT_SECRET,
            // seconds
            expiresIn: isRefreshToken ? 3600 : 300,
        });
    }

async rotateToken(token: string, isRefreshToken: boolean) {
        const decoded = this.jwtService.verify(token, {
            secret: JWT_SECRET,
        });

        if(decoded.type !== 'refresh'){
            throw new UnauthorizedException('토큰 재발급은 Refresh 토큰으로만 가능합니다!');
        }

        return this.signToken({
            ...decoded,
        }, isRefreshToken);
    }

토큰 생성 시 payload에서 sub에 user.id를 할당하고 있는데 재발급시 decoded 객체를 그대로 할당하면 sub 정보가 사라지지 않나요?

답변 1

0

코드팩토리님의 프로필 이미지
코드팩토리
지식공유자

2023. 11. 12. 17:05

안녕하세요!

확인해봤는데 말씀하신게 맞습니다.

sub를 할당하는 로직에서 버그가 있습니다.

{...decoded, id:decoded.sub} <- 이런식 또는 비슷한 형태의 로직 추가가 필요하네요. decoded가 any 타입으로 반환되기 때문에 빌드타임 에러가 없습니다.

감사합니다!

최영철님의 프로필 이미지

2024. 03. 03. 18:24

해당 질문자님의 버그 발견으로 인해 complete 옵션이 추가 된게 맞나요 ?!

강의 보고 개인 프로젝트에 적용중에 이상이 없는데 질문 사항에 버그가 있다는걸 알게 됬는데 어디부분이 버그인지를 모르겠네요...


  rotateToken(token: string, isRefreshToken: boolean) {
    const decoded = this.jwtService.verify(token, {
      secret: this.configService.get<string>(ENV_JWT_SECRET_KEY),
      complete: true
    });
코드팩토리님의 프로필 이미지
코드팩토리
지식공유자

2024. 03. 04. 20:50

sub (id) 값이 할당 안되는 경우입니다. 토큰 활용을 어떻게 하고 있냐에 따라 전혀 무관할수도 있습니다.