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

jhreplay.lee님의 프로필 이미지
jhreplay.lee

작성한 질문수

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

토큰 재발급 로직 코딩하기

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

작성

·

325

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

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

안녕하세요!

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

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

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

감사합니다!

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

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


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

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

jhreplay.lee님의 프로필 이미지
jhreplay.lee

작성한 질문수

질문하기