Menu
CoddyTech

Guards

Teil des Abschnitts TypeScript und NestJS der Node.js-Journey von Coddy. Lektion 14 von 17.

Jede Person kann Aufgaben erstellen oder löschen. Ein Guard entscheidet, ob eine Anfrage ihren Handler erreichen darf: Nest ruft dessen canActivate auf, und wenn es false zurückgibt, antwortet Nest mit 403 Forbidden, ohne die Methode auszuführen.

@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() liefert die Anfrage; Node speichert die Namen ihrer Header in Kleinbuchstaben, lies also request.headers['x-api-key']. @UseGuards an einer Methode schützt diese Methode. Auf der Controller-Klasse schützt es jede darin enthaltene Methode.

challenge icon

Aufgabe

Einfach
  • Vervollständige ApiKeyGuard: Lass eine Anfrage nur durch, wenn ihr Header x-api-key process.env.API_KEY entspricht (in dieser Lektion wird tasks-key-123 festgelegt).
  • Sichere POST /tasks und DELETE /tasks/:id ab; Lesezugriffe bleiben offen.
  • Sende POST /tasks mit einem Titel: 403. Füge den Header x-api-key: tasks-key-123 hinzu und sende die Anfrage erneut: 201. GET /tasks antwortet auch ohne ihn.

Probier es selbst

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

@Injectable()
export class ApiKeyGuard implements CanActivate {
    canActivate(context: ExecutionContext): boolean {
        // Lasse die Anfrage nur durch, wenn ihr x-api-key-Header
        // mit process.env.API_KEY übereinstimmt.
        return true;
    }
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in TypeScript und NestJS