가드
Coddy Node.js 여정의 TypeScript와 NestJS 섹션에 포함된 레슨. 17개 중 14번째.
누구나 작업을 만들거나 삭제할 수 있습니다. 가드는 요청이 핸들러에 도달할 수 있는지 결정합니다. Nest는 가드의 canActivate를 호출하고, 이 메서드가 false를 반환하면 Nest는 해당 메서드를 실행하지 않고 403 Forbidden 응답을 보냅니다.
@Injectable()
export class OpenHoursGuard implements CanActivate {
canActivate(context: ExecutionContext): boolean {
const hour = new Date().getHours();
return hour >= 9 && hour < 17;
}
}
@Post()
@UseGuards(OpenHoursGuard)
book() {}context.switchToHttp().getRequest()는 요청을 가져옵니다. Node는 헤더 이름을 소문자로 저장하므로 request.headers['x-api-key']를 읽으세요. 메서드에 적용된 @UseGuards는 해당 메서드를 보호합니다. 컨트롤러 클래스에 적용하면 그 안의 모든 메서드를 보호합니다.
챌린지
쉬움ApiKeyGuard를 완성하세요. 요청의x-api-key헤더가process.env.API_KEY와 일치하는 경우에만 요청을 통과시키세요(이 강의에서는tasks-key-123을 설정합니다).POST /tasks와DELETE /tasks/:id를 보호하고, 읽기 요청은 계속 열어 두세요.- 제목을 포함해
POST /tasks요청을 보내면 403 응답이 반환됩니다.x-api-key: tasks-key-123헤더를 추가해 다시 보내면 201 응답이 반환됩니다.GET /tasks는 헤더 없이도 응답합니다.
직접 해보기
import { CanActivate, ExecutionContext, Injectable } from '@nestjs/common';
@Injectable()
export class ApiKeyGuard implements CanActivate {
canActivate(context: ExecutionContext): boolean {
// 요청의 x-api-key 헤더가
// process.env.API_KEY와 같을 때만 요청을 통과시킵니다.
return true;
}
}
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.