שומרים
חלק מהיחידה 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 על מתודה מגן על אותה מתודה. על מחלקת הבקר הוא מגן על כל המתודות שבה.
אתגר
קל- השלימו את
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;
}
}
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.