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ę.
Wyzwanie
Łatwy- Dokończ
ApiKeyGuard: przepuszczaj żądanie tylko wtedy, gdy jego nagłówekx-api-keyjest równyprocess.env.API_KEY(w tej lekcji ustawionotasks-key-123). - Zabezpiecz
POST /tasksiDELETE /tasks/:id; odczyt pozostaje otwarty. - Wyślij
POST /tasksz tytułem: 403. Dodaj nagłówekx-api-key: tasks-key-123i wyślij ponownie: 201.GET /tasksodpowiada 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;
}
}
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.