Menu
CoddyTech

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.

challenge icon

Défi

Facile
  • Terminez ApiKeyGuard : ne laissez passer une requête que lorsque son en-tête x-api-key est égal à process.env.API_KEY (cette leçon définit tasks-key-123).
  • Protégez POST /tasks et DELETE /tasks/:id ; la lecture reste accessible.
  • Envoyez POST /tasks avec un titre : 403. Ajoutez l’en-tête x-api-key: tasks-key-123 et envoyez la requête à nouveau : 201. GET /tasks ré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;
    }
}
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de TypeScript et NestJS