لارافيل, Api / 2024-09-16

التعامل مع Api في لارافيل - الجزء السادس - كيفية حماية روابط API بكلمة مرور لمنع الإستخدام العشوائي.

التعامل مع Api في لارافيل - الجزء السادس - كيفية حماية روابط API بكلمة مرور لمنع الإستخدام العشوائي.

2024-09-16 وقت القراءه : 3 دقائق

كما لاحظنا من خلال دروس RESTful API السابقة، أن أي شخص يستخدم رابط api يتم عرض النتائج له بشكل مباشرة، لكن ببعض الأحيان قد نرغب بإضافة طبقة حماية لحماية routes يمعنى أنه يجب أن نتحقق أنه يحق للشخص إستخدام الـ api، ومن أحد الطرق التي يمكن إستخدامها أن يتم إرسال كلمة مرور وإسم مستخدم مع كل رابط api يتم إستخدامة.

 

خطوات حماية روابط api من خلال كلمة مرور وباسووورد.

إنشاء middleware مثلا باسم ProtectApiWithPassword.

php artisan make:middleware ProtectApiWithPassword

من خلال تنفيذ أمر artisan أعلاه سيتم إنشاء middleware جديد باسم ProtectApiWithPassword

class ProtectApiWithPassword
{
    public function handle(Request $request, Closure $next)
    {
        return $next($request);
    }
}

 

نحتاج الأن لكتابة منطق العمل لهذا الـ middleware

public function handle(Request $request, Closure $next)
{
     if($request->api_password !== env('API_PASSWORD','ethar_password')){
        return \response()->json(['message'=>'UnAuthenticated']);
    }
    return $next($request);
}

حيث إنه في كل رابط يجب إرسال باراميتر باسم api_password ويجب أن تساوي قيمة API_PASSWORD التي سيتم تعريفها في ملف .env أما إذا لم تكن معرفة فإنه يجب أن تكون قيمتها تساوي ether_password.

 

تعريف قيمة API_PASSWORD في ملف .env

API_PASSWORD=ethar_password


تسجيل middleware في ملف kernel.php

 في داخل المصفوفة routeMiddleware يتم تسجيل middleware

'ProtectApiWithPassword' => \App\Http\Middleware\ProtectApiWithPassword::class,

 

 

تطبيق الـ middleware الذي تم إنشاؤه على routes في ملف api.php

Route::group(['middleware'=>['ProtectApiWithPassword']],function() {
     Route::apiResource('brands', BrandController::class);
});

الأن لو قمنا بزيارة الرابط 

http://www.test.test/api/v1/brands

فإننا سوف نحصل على رسالة خطأ 

{
    "message": "UnAuthenticated"
}

وذلك لأنه في ProtectApiWithPassword قمنا بإخبارة أنه يجب إرسال parameter بإسم api_password وتكون قيمته تساوي ethar_password، حيث إنه يجب إرسال باراميتر api_password مع كل رابط

 

الأن لو تم زيارة الرابط

http://www.test.test/api/v1/brands?api_password=ethar_password

فإننا سوف نحصل على البيانات

 

 

إضافة تعليق
Loading...