inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

토큰 재발급 로직 코딩하기

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

411

jhreplay.lee

작성한 질문수 8

2

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 정보가 사라지지 않나요?

javascript typescript rest-api nestjs backend

답변 1

1

코드팩토리

안녕하세요!

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

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

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

감사합니다!

0

최영철

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

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


  rotateToken(token: string, isRefreshToken: boolean) {
    const decoded = this.jwtService.verify(token, {
      secret: this.configService.get<string>(ENV_JWT_SECRET_KEY),
      complete: true
    });

0

코드팩토리

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

cascade 질문

0

38

1

@types/bcrypt 설치과정이 누락된것같습니다.

0

45

1

process.env port key 에러

0

45

1

추상화

0

48

1

[공유] DTO optional 필드가 undefined로 잡혀 TypeORM 조건이 깨지는 현상

0

94

2

where 키워드가 들어가는 메서드와 아닌 메서드

0

56

1

BearerTokenGuard에서 db를 조회해서 유저 정보를 불러오는 이유?

0

69

1

app.controller app.service 는 지워도되나요?

0

69

1

@JoinColumn을 쓰는 경우와 안쓰는 경우의 차이

0

78

1

포트 3000에서 listen하는 곳까지 넘어가지 않습니다.

0

64

1

PickType 사용 시 `as const`를 꼭 사용해야 하나요?

0

102

2

socket connect 오류

0

96

2

강의를 들으면서 궁금한 점

0

97

2

DELETE 요청의 반환값은 어떤 기준으로 결정하는 게 좋을까요?

0

60

2

커리큘럼 질문

0

98

2

put 요청은 언제

0

90

3

typeorm VS prisma

0

344

2

142 강의 > 4:00 > 포스트멘 활용 관련 질문 드립니다.

0

76

2

User 데코레이터 버그 수정 전달드립니다.

0

67

1

git 주소 부탁드립니다.

0

112

2

nest g resource 명령어 에러

0

99

2

로그인 엔드포인트 관련 질문

0

84

2

yarn으로 express 다운 후 node 2_server.js 실행 안되는 경우

0

146

3

"흔히 사용되는 메서드" 강의 관련 질문입니다~

0

95

2