Penjaga
Termasuk bagian TypeScript dan NestJS dalam perjalanan Node.js di Coddy. Pelajaran 14 dari 17.
Siapa pun dapat membuat atau menghapus tugas. Guard menentukan apakah sebuah permintaan boleh mencapai handler-nya: Nest memanggil canActivate, dan ketika hasilnya false, Nest memberikan respons 403 Forbidden tanpa menjalankan method tersebut.
@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() memberikan request; Node menyimpan nama header dalam huruf kecil, jadi baca request.headers['x-api-key']. @UseGuards pada sebuah method akan melindungi method tersebut. Jika dipasang pada class controller, guard akan melindungi semua method di dalamnya.
Tantangan
Mudah- Selesaikan
ApiKeyGuard: izinkan permintaan hanya jika headerx-api-key-nya sama denganprocess.env.API_KEY(pelajaran ini menetapkantasks-key-123). - Amankan
POST /tasksdanDELETE /tasks/:id; akses baca tetap terbuka. - Kirim
POST /tasksdengan title: 403. Tambahkan headerx-api-key: tasks-key-123, lalu kirim lagi: 201.GET /tasksmemberikan respons tanpa header tersebut.
Coba sendiri
import { CanActivate, ExecutionContext, Injectable } from '@nestjs/common';
@Injectable()
export class ApiKeyGuard implements CanActivate {
canActivate(context: ExecutionContext): boolean {
// Izinkan permintaan masuk hanya jika header x-api-key-nya
// sama dengan process.env.API_KEY.
return true;
}
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di TypeScript dan NestJS
Latihan sendiri: Playground Express