[TIL] NestJS 공부 9일차

정인교·2021년 6월 12일
0

TIL(Today I Learned)

목록 보기
20/67
post-thumbnail

Guards

이친구도 @Injectable데코레이터를 사용한다. 인터페이스는 CanActivate를 구현해야합니다.

공식 문서에서 얻을 수 있는 사진이다.

어쨌든, Guards는 단일 책임을 갖는데, 이들은 주어진 요청이 라우트 핸들러에 의해 처리될 수 있는 건지 아닌지 확인하는 역할이다.
보통 express에선 middleware에서 처리되지만, middleware는 next()를 사용하면 어느 heandler가 실횡될지 알지 못한다. 그래서 따로 빠진 것 같다.
그리고 Guards는 middleware 후에 실행되지만, pipe보단 먼저 실행된다.

Authorization guard

여기서 Authorization은 아까 말했던 주어진 요청을 확인하는 역할을 뜻하는데, 이 단어가 그 뜻인지 아니면 그냥 권한 부여 이런 뜻인지 잘 모르겠지만, 전자가 맞는 것 같다.

guard파일을 만들어서 사용해보자.

import { Injectable, CanActivate, ExecutionContext }from '@nestjs/common';
import { Observable } from 'rxjs';

@Injectable()
export class AuthGuard implements CanActivate {
  canActivate(
    context: ExecutionContext
  ): boolean | Promise<boolean> | Observable<boolean> {
    const request = context.switchToHttp().getRequest();
    return validateRequest(request);
  }
}

이 파일의 핵심은 어떻게 guards가 req/res cycle에 적합한지 보여주는 것이다.
그리고 모든 guards는 canActicate()를 구현해야 하는데, 이는 boolean값을 리턴한다.
그리고 리턴한 값에 따라 NestJS가 request를 처리할지 거부할지 정한다.

역할 기반 인증

특정 역할에 해당하는 유저만 허락하는 것을 만들어보자.

import { Injectable, CanActivate, ExecutionContext }from '@nestjs/common';
import { Observable } from 'rxjs';

@Injectable()
export class RolesGuard implements CanActivate {
  canActivate(
    context: ExecutionContext
  ): boolean | Promise<boolean> | Observable<boolean> {
    return true;
  }
}
profile
백엔드 개발자 정인교입니다!

0개의 댓글

관련 채용 정보