Menu
CoddyTech

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.

challenge icon

Desafío

Fácil
  • Completa ApiKeyGuard: deja pasar una solicitud solo cuando su encabezado x-api-key es igual a process.env.API_KEY (en esta lección se establece tasks-key-123).
  • Protege POST /tasks y DELETE /tasks/:id; las solicitudes de lectura siguen abiertas.
  • Envía POST /tasks con un título: 403. Añade el encabezado x-api-key: tasks-key-123 y vuelve a enviarla: 201. GET /tasks responde 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;
    }
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de TypeScript y NestJS