kakasoo

Strategy, AuthGuard에서 에러 커스텀하기 본문

프로그래밍/NestJS

Strategy, AuthGuard에서 에러 커스텀하기

카카수(kakasoo) 2023. 1. 29. 23:41
반응형
import { BadRequestException, ExecutionContext, Injectable } from '@nestjs/common';
import { AuthGuard } from '@nestjs/passport';
import { ERROR } from '@root/config/constant/error';
import { DecodedUserToken } from '@root/types';

@Injectable()
export class JwtGuard extends AuthGuard('jwt') {
  handleRequest<TUser = DecodedUserToken>(
    err: any,
    user: any,
    info: any,
    context: ExecutionContext,
    status?: any,
  ): TUser {
    if (info?.message === 'No auth token') {
      throw new BadRequestException(ERROR.NO_AUTH_TOKEN);
    }
    return super.handleRequest(err, user, info, context, status);
  }
}

 

보통은 JwtAuthGuard, LocalAuthGuard 등등을 커스텀할 일 없이, 그저 AuthGuard를 확장하는 인터페이스로만 사용한다.

이 때 만약 에러를 직접 커스텀하고 싶다면, handleRequest 메서드를 보충해주면 된다.

handleRequest는 TUser 라는 타입 파라미터를 받아 TUser를 반환하는 메서드로, 즉, 유저를 반환한다고 보면 된다.

이 유저라는 것은 strategy를 거쳐서 해독된 유저 데이터이기 때문에, 여기서 err, user, info, context 를 파악해 에러를 커스텀한다.

위 코드는 인증 실패인 Unauthorization을 내가 원하는 형태로 바꾸기 위해 추가한 코드다.

return 의 super.handleRequest()는 그 외에 내가 커스텀할 게 없기 때문에 원래 구현된 대로 동작하게끔 유도하는 구문이다.

반응형