Menu
CoddyTech

Strażnicy

Część sekcji TypeScript i NestJS ścieżki Node.js w Coddy. Lekcja 14 z 17.

Każdy może tworzyć i usuwać zadania. Guard decyduje, czy żądanie może dotrzeć do jego obsługi: Nest wywołuje jego canActivate, a gdy zwraca ono false, Nest odpowiada błędem 403 Forbidden, nie uruchamiając metody.

@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() zwraca żądanie; Node przechowuje nazwy jego nagłówków małymi literami, więc odczytaj request.headers['x-api-key']. @UseGuards użyte w metodzie zabezpiecza tę metodę. Użyte w klasie kontrolera zabezpiecza każdą zawartą w niej metodę.

challenge icon

Wyzwanie

Łatwy
  • Dokończ ApiKeyGuard: przepuszczaj żądanie tylko wtedy, gdy jego nagłówek x-api-key jest równy process.env.API_KEY (w tej lekcji ustawiono tasks-key-123).
  • Zabezpiecz POST /tasks i DELETE /tasks/:id; odczyt pozostaje otwarty.
  • Wyślij POST /tasks z tytułem: 403. Dodaj nagłówek x-api-key: tasks-key-123 i wyślij ponownie: 201. GET /tasks odpowiada bez niego.

Spróbuj swoich sił

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

@Injectable()
export class ApiKeyGuard implements CanActivate {
    canActivate(context: ExecutionContext): boolean {
        // Przepuść żądanie tylko wtedy, gdy jego nagłówek x-api-key
        // jest równy process.env.API_KEY.
        return true;
    }
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji TypeScript i NestJS