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.
Aufgabe
Einfach- Vervollständige
ApiKeyGuard: Lass eine Anfrage nur durch, wenn ihr Headerx-api-keyprocess.env.API_KEYentspricht (in dieser Lektion wirdtasks-key-123festgelegt). - Sichere
POST /tasksundDELETE /tasks/:idab; Lesezugriffe bleiben offen. - Sende
POST /tasksmit einem Titel: 403. Füge den Headerx-api-key: tasks-key-123hinzu und sende die Anfrage erneut: 201.GET /tasksantwortet 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;
}
}
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.