• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

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

24.04.25 22:26 작성 24.04.25 22:29 수정 조회수 49

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,
    });
  }

 

답변 1

답변을 작성해보세요.

1

안녕하세요!

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

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

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

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

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

감사합니다!