프로그래밍/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()는 그 외에 내가 커스텀할 게 없기 때문에 원래 구현된 대로 동작하게끔 유도하는 구문이다.
반응형