Menu
CoddyTech

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.

challenge icon

Tantangan

Mudah
  • Selesaikan ApiKeyGuard: izinkan permintaan hanya jika header x-api-key-nya sama dengan process.env.API_KEY (pelajaran ini menetapkan tasks-key-123).
  • Amankan POST /tasks dan DELETE /tasks/:id; akses baca tetap terbuka.
  • Kirim POST /tasks dengan title: 403. Tambahkan header x-api-key: tasks-key-123, lalu kirim lagi: 201. GET /tasks memberikan 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;
    }
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di TypeScript dan NestJS

Latihan sendiri: Playground Express