Guard'lar
Coddy'nin Node.js Journey'sinin TypeScript ve NestJS bölümünün bir parçası. Ders 14 / 17.
Herkes görev oluşturabilir veya silebilir. Bir koruma, isteğin işleyiciye ulaşıp ulaşamayacağına karar verir: Nest, canActivate yöntemini çağırır ve bu yöntem false döndürdüğünde Nest, yöntemi çalıştırmadan 403 Forbidden yanıtı verir.
@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() isteği verir; Node, başlık adlarını küçük harflerle saklar, bu nedenle request.headers['x-api-key'] değerini okuyun. Bir yöntem üzerindeki @UseGuards, o yöntemi korur. Denetleyici sınıfı üzerindeyse sınıftaki her yöntemi korur.
Görev
KolayApiKeyGuard'ı tamamla: yalnızcax-api-keybaşlığıprocess.env.API_KEYdeğerine eşitse isteğin geçmesine izin ver (bu derstetasks-key-123ayarlanır).POST /tasksveDELETE /tasks/:iduç noktalarını koru; okuma işlemleri açık kalsın.- Bir başlıkla
POST /tasksisteği gönder: 403.x-api-key: tasks-key-123başlığını ekleyip isteği yeniden gönder: 201.GET /tasksbu başlık olmadan yanıt verir.
Kendin dene
import { CanActivate, ExecutionContext, Injectable } from '@nestjs/common';
@Injectable()
export class ApiKeyGuard implements CanActivate {
canActivate(context: ExecutionContext): boolean {
// İsteğe yalnızca x-api-key başlığı
// process.env.API_KEY değerine eşitse izin ver.
return true;
}
}
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.