Guardias
Parte de la sección TypeScript y NestJS del Journey de Node.js de Coddy. Lección 14 de 17.
Cualquiera puede crear o eliminar tareas. Un guard decide si una solicitud puede llegar a su controlador: Nest llama a su canActivate y, cuando devuelve false, Nest responde con 403 Forbidden sin ejecutar el 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() proporciona la solicitud; Node almacena los nombres de sus encabezados en minúsculas, así que lee request.headers['x-api-key']. @UseGuards en un método protege ese método. En la clase del controlador, protege todos sus métodos.
Desafío
Fácil- Completa
ApiKeyGuard: deja pasar una solicitud solo cuando su encabezadox-api-keyes igual aprocess.env.API_KEY(en esta lección se establecetasks-key-123). - Protege
POST /tasksyDELETE /tasks/:id; las solicitudes de lectura siguen abiertas. - Envía
POST /taskscon un título: 403. Añade el encabezadox-api-key: tasks-key-123y vuelve a enviarla: 201.GET /tasksresponde sin él.
Pruébalo tú mismo
import { CanActivate, ExecutionContext, Injectable } from '@nestjs/common';
@Injectable()
export class ApiKeyGuard implements CanActivate {
canActivate(context: ExecutionContext): boolean {
// Permite que la solicitud pase solo cuando su encabezado x-api-key
// sea igual a process.env.API_KEY.
return true;
}
}
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.