Menu
CoddyTech

שומרים

חלק מהיחידה TypeScript ו-NestJS במסלול ה-Node.js של Coddy. שיעור 14 מתוך 17.

כל אחד יכול ליצור משימות או למחוק אותן. שומר קובע אם בקשה יכולה להגיע למטפל שלה: Nest קורא ל־canActivate שלו, וכשהוא מחזיר false, Nest משיב 403 Forbidden בלי להפעיל את המתודה.

@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() מחזיר את הבקשה; Node שומר את שמות הכותרות שלה באותיות קטנות, לכן יש לקרוא את request.headers['x-api-key']. @UseGuards על מתודה מגן על אותה מתודה. על מחלקת הבקר הוא מגן על כל המתודות שבה.

challenge icon

אתגר

קל
  • השלימו את ApiKeyGuard: אפשרו לבקשה לעבור רק כאשר הכותרת x-api-key שלה שווה ל־process.env.API_KEY (בשיעור הזה מוגדר הערך tasks-key-123).
  • הגנו על POST /tasks ועל DELETE /tasks/:id; קריאה נשארת פתוחה.
  • שלחו POST /tasks עם כותרת: התשובה היא 403. הוסיפו את הכותרת x-api-key: tasks-key-123 ושלחו שוב: התשובה היא 201. GET /tasks מחזיר תשובה גם בלעדיה.

נסו בעצמכם

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

@Injectable()
export class ApiKeyGuard implements CanActivate {
    canActivate(context: ExecutionContext): boolean {
        // אפשר לבקשה לעבור רק כאשר הכותרת x-api-key שלה
        // שווה ל־process.env.API_KEY.
        return true;
    }
}
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה TypeScript ו-NestJS