Gardes
Fait partie de la section TypeScript et NestJS du Journey Node.js de Coddy. Leçon 14 sur 17.
Tout le monde peut créer ou supprimer des tâches. Un guard décide si une requête peut atteindre son gestionnaire : Nest appelle son canActivate et, lorsqu’il renvoie false, Nest répond 403 Forbidden sans exécuter la méthode.
@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() fournit la requête ; Node stocke les noms de ses en-têtes en minuscules, donc lisez request.headers['x-api-key']. @UseGuards sur une méthode protège cette méthode. Sur la classe du contrôleur, il protège toutes ses méthodes.
Défi
Facile- Terminez
ApiKeyGuard: ne laissez passer une requête que lorsque son en-têtex-api-keyest égal àprocess.env.API_KEY(cette leçon définittasks-key-123). - Protégez
POST /tasksetDELETE /tasks/:id; la lecture reste accessible. - Envoyez
POST /tasksavec un titre : 403. Ajoutez l’en-têtex-api-key: tasks-key-123et envoyez la requête à nouveau : 201.GET /tasksrépond sans cet en-tête.
Essayez vous-même
import { CanActivate, ExecutionContext, Injectable } from '@nestjs/common';
@Injectable()
export class ApiKeyGuard implements CanActivate {
canActivate(context: ExecutionContext): boolean {
// Ne laissez passer la requête que si son en-tête x-api-key
// est égal à process.env.API_KEY.
return true;
}
}
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.