Guards
Parte da seção TypeScript e NestJS do Journey de Node.js da Coddy. Lição 14 de 17.
Qualquer pessoa pode criar ou excluir tarefas. Um guard decide se uma solicitação pode chegar ao seu manipulador: o Nest chama seu canActivate e, quando ele retorna false, o Nest responde com 403 Forbidden sem executar o método.
@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() fornece a solicitação; o Node armazena os nomes dos cabeçalhos em letras minúsculas, então leia request.headers['x-api-key']. @UseGuards em um método protege esse método. Na classe do controlador, protege todos os métodos dela.
Desafio
Fácil- Conclua
ApiKeyGuard: permita uma requisição somente quando o cabeçalhox-api-keyfor igual aprocess.env.API_KEY(esta lição definetasks-key-123). - Proteja
POST /taskseDELETE /tasks/:id; a leitura continua aberta. - Envie
POST /taskscom um título: 403. Adicione o cabeçalhox-api-key: tasks-key-123e envie novamente: 201.GET /tasksresponde sem ele.
Experimente você mesmo
import { CanActivate, ExecutionContext, Injectable } from '@nestjs/common';
@Injectable()
export class ApiKeyGuard implements CanActivate {
canActivate(context: ExecutionContext): boolean {
// Permita a passagem da requisição somente quando o cabeçalho x-api-key dela
// for igual a process.env.API_KEY.
return true;
}
}
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.