inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

BasicTokenGuard 구현해보기

guard와 controller 토큰 추출 / 디코드 중복 코드 관련 질문

해결된 질문

247

김용민

작성한 질문수 74

0

  // POST auth/login/email
  @Post('login/email')
  @UseGuards(BasicTokenGuard)
  // authorization 기준으로 rawToken을 받아옴.
  postLoginEmail(@Headers('authorization') rawToken: string, @Request() req) {
    // email:password -> base64
    // adsfasdfasfdad => email:password
    const token = this.authService.extractTokenFromHeader(rawToken, false);

    const credentials = this.authService.decodeBasicToken(token);

    return this.authService.loginWithEmail({
      email: credentials.email,
      password: credentials.password,
    });
  }

질문이 있습니다.req.user.email , req.user.password 이런식으로 Guard를 통해 요청에 대한 값을 받아올 수 있다고 설명해주셨습니다. 실제로 guard 부분에서, 해당 extractTokenFromHeader부분과, decodeBasicToken 부분이 겹치는 것 같은데, 이중적으로 처리해주는 것이 맞는지 아니면 아래와 같이 req.user.password 부분을 디코드 해주어서, 중복 부분을 생략해 줄 수 있을 것이라고 생각하는데 어떤 접근방법이 맞는지 궁금합니다! 이 부분도 중복을 해결해야 하는 부분 아닌가 해서 궁금합니다!

  // POST auth/login/email
  @Post('login/email')
  @UseGuards(BasicTokenGuard)
  // authorization 기준으로 rawToken을 받아옴.
  postLoginEmail(@Headers('authorization') rawToken: string, @Request() req) {

    // 여기는 req.user.password를 직접 입력하게되면 인코드된 값이므로, 디코드 된 값이 들어가야 할 것 같긴합니다. (JWT 모듈같은 것을 활용해서!)
    return this.authService.loginWithEmail({
      email: req.user.email,
      password: req.user.password,
    });
  }

 

javascript typescript rest-api nestjs backend

답변 1

1

코드팩토리

안녕하세요!

extract 후 decode하는 코드가 중복되고 자주 사용될 수 있으니 따로 빼두는게 좋을지에대한 질문이 맞을까요?

만약에 그렇게 생각하신다면 그렇게 해도 괜찮습니다.

앞으로 코딩하면서 많이 느끼시겠지만 그런 결정을 하는데 절대적인 정답은 존재하지 않습니다.

쉽게 말하면 2번 중복되는게 과연 많이 중복 되는건지, 앞으로도 중복될 여지가 많은지, 중복되는 코드를 따로 공통 코드로 관리했을때 과연 나중에 유리할지 (나중에 공통 코드가 아니게 될 가능성은 없는지) 등의 다양한 가능성을 고려해야 하기때문입니다.

결정에 대한 근거만 있으면 된다고 저는 생각합니다.

감사합니다!

cascade 질문

0

38

1

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

0

45

1

process.env port key 에러

0

45

1

추상화

0

48

1

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

0

93

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

59

2

커리큘럼 질문

0

98

2

put 요청은 언제

0

90

3

typeorm VS prisma

0

343

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