Menu
CoddyTech

Guard

Fa parte della sezione TypeScript e NestJS del percorso Node.js di Coddy. Lezione 14 di 17.

Chiunque può creare o eliminare attività. Un guard decide se una richiesta può raggiungere il relativo gestore: Nest chiama il suo canActivate e, quando restituisce false, Nest risponde con 403 Forbidden senza eseguire il metodo.

@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() restituisce la richiesta; Node memorizza i nomi delle intestazioni in minuscolo, quindi leggi request.headers['x-api-key']. @UseGuards su un metodo protegge quel metodo. Sulla classe del controller, protegge tutti i metodi al suo interno.

challenge icon

Sfida

Facile
  • Completa ApiKeyGuard: lascia passare una richiesta solo quando la sua intestazione x-api-key è uguale a process.env.API_KEY (in questa lezione si imposta tasks-key-123).
  • Proteggi POST /tasks e DELETE /tasks/:id; la lettura resta accessibile.
  • Invia POST /tasks con un titolo: 403. Aggiungi l'intestazione x-api-key: tasks-key-123 e invialo di nuovo: 201. GET /tasks risponde anche senza.

Provalo tu

import { CanActivate, ExecutionContext, Injectable } from '@nestjs/common';

@Injectable()
export class ApiKeyGuard implements CanActivate {
    canActivate(context: ExecutionContext): boolean {
        // Consenti il passaggio della richiesta solo quando il suo header x-api-key
        // è uguale a process.env.API_KEY.
        return true;
    }
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di TypeScript e NestJS