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.
Sfida
Facile- Completa
ApiKeyGuard: lascia passare una richiesta solo quando la sua intestazionex-api-keyè uguale aprocess.env.API_KEY(in questa lezione si impostatasks-key-123). - Proteggi
POST /taskseDELETE /tasks/:id; la lettura resta accessibile. - Invia
POST /taskscon un titolo: 403. Aggiungi l'intestazionex-api-key: tasks-key-123e invialo di nuovo: 201.GET /tasksrisponde 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;
}
}
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.