Menu
CoddyTech

الحراس

جزء من قسم TypeScript وNestJS في رحلة Node.js على Coddy. الدرس 14 من 17.

يمكن لأي شخص إنشاء المهام أو حذفها. يقرر الحارس ما إذا كان بإمكان الطلب الوصول إلى معالجه: يستدعي Nest الدالة canActivate، وعندما تُرجع false، يجيب Nest بالرمز 403 «محظور» من دون تشغيل الطريقة.

@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