[NestJS] Guard

Younghwan Cha·2023년 6월 15일
0

Nest.js

목록 보기
5/27
post-thumbnail

CanActivate

Guard 를 구현하기 위해서는 CanActivate interface 를 구현해야한다.
따라서, 모든 GuardcanActivate() 함수를 구현해야한다.
이 함수는 현재의 request가 실행될 수 있는지 없는지 유무(boolean)를 return 해야 해야 하고, 이를 통해서 권한이 있느냐 없느냐를 확인할 수 있게 된다. true라면 해당 request가 통과될 것이고, false라면 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;
  }
}

이후에 Guard 를 사용하려면 아래와 같이 UseGuard decorator 를 사용하여 구현하면 된다.

@UseGuard()
@Path()
async getUsers() {
  return this.testService.getUsers();
}

webTrafficGuard

// public.guard.ts
import { SetMetadata } from '@nestjs/common';

export const IS_PUBLIC_KEY = 'isPublic';
export const Public = () => SetMetadata(IS_PUBLIC_KEY, true);

// webTraffic.guard.ts
const isPublic = this.reflector.get(IS_PUBLIC_KEY, context.getHandler());


// main.ts
const reflector = app.get(Reflector);
app.useGlobalFilters(new ExceptionHandler());
app.useGlobalGuards(new BlockWebTraffic(reflector));

[Nestjs guard] https://docs.nestjs.com/guards#execution-context
[Nestjs execution context] https://docs.nestjs.com/fundamentals/execution-context

profile
개발 기록

0개의 댓글