المصادقة الكاملة للمستخدم والتحكم في الوصول - برنامج تعليمي لـ Laravel Passport ، Pt. 1
نشرت: 2022-03-11عند تطوير تطبيق ويب ، من الأفضل عمومًا تقسيمه إلى مستويين. تتفاعل واجهة برمجة تطبيقات الطبقة الوسطى مع قاعدة البيانات ، وتتكون طبقة الويب عادةً من واجهة أمامية SPA أو MPA. بهذه الطريقة ، يكون تطبيق الويب مقترنًا بشكل غير وثيق ، مما يسهل إدارته وتصحيح الأخطاء على المدى الطويل.
عندما يتم إنشاء API ، قد يبدو إعداد المصادقة والحالة في سياق API عديم الحالة مشكلة إلى حد ما.
في هذه المقالة ، سننظر في كيفية تنفيذ المصادقة الكاملة للمستخدم ونموذج بسيط للتحكم في الوصول في واجهة برمجة التطبيقات باستخدام Laravel و Passport. يجب أن يكون لديك خبرة في العمل مع Laravel لأن هذا ليس درسًا تمهيديًا.
متطلبات التثبيت:
- PHP 7+ و MySQL و Apache (يمكن للمطورين الراغبين في تثبيت الثلاثة في وقت واحد استخدام XAMPP.)
- ملحن
- Laravel 7
- جواز سفر Laravel. نظرًا لأن واجهات برمجة التطبيقات عديمة الحالة بشكل عام ولا تستخدم الجلسات ، فإننا نستخدم الرموز المميزة بشكل عام للحفاظ على الحالة بين الطلبات. يستخدم Laravel مكتبة Passport لتنفيذ خادم OAuth2 كامل يمكننا استخدامه للمصادقة في واجهة برمجة التطبيقات الخاصة بنا.
- ساعي البريد أو cURL أو Insomnia لاختبار واجهة برمجة التطبيقات - هذا يرجع إلى التفضيل الشخصي
- محرر نصوص من اختيارك
- مساعدي Laravel (لـ Laravel 6.0 والإصدارات الأحدث) - بعد تثبيت Laravel و Passport ، ما عليك سوى تشغيل:
composer require laravel/helpers
مع التثبيت أعلاه ، نحن على استعداد للبدء. تأكد من إعداد اتصال قاعدة البيانات عن طريق تحرير ملف .env
.
دروس Laravel Passport ، الخطوة 1: أضف وحدة تحكم ونموذجًا للطلبات الوهمية
أولاً ، سنقوم بإنشاء وحدة تحكم ونموذج للطلبات الوهمية. لن يكون للنموذج فائدة كبيرة في هذا البرنامج التعليمي ، إنه فقط لإعطاء فكرة عن البيانات التي تهدف وحدة التحكم إلى معالجتها.
قبل إنشاء النموذج ووحدة التحكم ، نحتاج إلى إنشاء ترحيل. في نافذة طرفية - أو نافذة cmd.exe
، إذا كنت تستخدم Windows - قم بتشغيل:
php artisan make:migration create_articles_table --create=articles
الآن ، انتقل إلى مجلد database/migrations
التهجيرات وافتح الملف باسم مشابه لـ xxxx_xx_xx_xxxxxx_create_articles_table.php
.
في دالة up
للفصل الدراسي ، سنكتب ما يلي:
Schema::create('articles', function (Blueprint $table) { $table->increments('id'); $table->string('title'); $table->string('body'); $table->integer('user_id'); $table->timestamps(); });
بعد ذلك ، سننشئ نموذج Article
. للقيام بذلك ، قم بتشغيل:
php artisan make:model Article
نقوم بعد ذلك بإنشاء وحدة تحكم ArticleController
عن طريق تشغيل:
php artisan make:controller ArticleController --resource
بعد ذلك ، سنقوم بتحرير ملف app/Providers/AppServiceProvider.php
واستيراد فئة Illuminate\Support\Facades\Schema
عن طريق إضافة:
use Illuminate\Support\Facades\Schema
... في الجزء السفلي من عمليات الاستيراد في الجزء العلوي من الملف.
بعد ذلك ، في وظيفة boot
، سنكتب:
Schema::defaultStringLength(191);
بعد الانتهاء من كل هذا ، يمكننا تشغيل:
php artisan migrate
... لتطبيق الترحيل الذي أنشأناه أعلاه.
دروس Laravel Passport ، الخطوة 2: إنشاء الأجزاء الضرورية من البرامج الوسيطة
هنا ، سنضيف قطع البرامج الوسيطة التي ستكون ضرورية لعمل API.
ردود JSON
القطعة الأولى المطلوبة هي البرنامج ForceJsonResponse
، والذي سيحول جميع الردود إلى JSON تلقائيًا.
للقيام بذلك ، قم بتشغيل:
php artisan make:middleware ForceJsonResponse
وهذه هي وظيفة مقبض تلك البرمجيات الوسيطة ، في App/Http/Middleware/ForceJsonReponse.php
:
public function handle($request, Closure $next) { $request->headers->set('Accept', 'application/json'); return $next($request); }
بعد ذلك ، سنضيف البرمجيات الوسيطة إلى ملف app/Http/Kernel.php
في مصفوفة $routeMiddleware
:
'json.response' => \App\Http\Middleware\ForceJsonResponse::class,
بعد ذلك ، سنضيفه أيضًا إلى مصفوفة $middleware
في نفس الملف:
\App\Http\Middleware\ForceJsonResponse::class,
سيضمن ذلك تشغيل البرنامج ForceJsonResponse
عند كل طلب.
CORS (تقاسم الموارد عبر الأصل)
للسماح لمستهلكي Laravel REST API بالوصول إليها من أصل مختلف ، علينا إعداد CORS. للقيام بذلك ، سنقوم بإنشاء قطعة من البرامج الوسيطة تسمى Cors
.
في Terminal أو موجه الأوامر ، أدخل cd
في الدليل الجذر للمشروع وقم بتشغيل:
php artisan make:middleware Cors
بعد ذلك ، في app/Http/Middleware/Cors.php
، أضف الكود التالي:
public function handle($request, Closure $next) { return $next($request) ->header('Access-Control-Allow-Origin', '*') ->header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS') ->header('Access-Control-Allow-Headers', 'X-Requested-With, Content-Type, X-Token-Auth, Authorization'); }
لتحميل هذه القطعة من البرامج الوسيطة ، سنحتاج إلى إضافة سطر إلى مصفوفة $routeMiddleware
الخاصة بـ app/Http/Kernel.php
:
'cors' => \App\Http\Middleware\Cors::class,
أيضًا ، سيتعين علينا إضافته إلى مصفوفة $middleware
كما فعلنا مع البرامج الوسيطة السابقة:
\App\Http\Middleware\Cors::class,
بعد القيام بذلك ، سنلحق مجموعة المسار هذه routes/api.php
:
Route::group(['middleware' => ['cors', 'json.response']], function () { // ... });
ستدخل جميع مسارات API الخاصة بنا في هذه الوظيفة ، كما سنرى أدناه.
دروس Laravel Passport ، الخطوة 3: إنشاء وحدات تحكم مصادقة المستخدم لواجهة برمجة التطبيقات
الآن نريد إنشاء وحدة تحكم المصادقة مع وظائف register
login
والتسجيل.
أولاً ، سنجري:
php artisan make:controller Auth/ApiAuthController
سنقوم الآن باستيراد بعض الفئات إلى ملف app/Http/Controllers/Auth/ApiAuthController.php
. سيتم استخدام هذه الفئات في إنشاء وظائف register
login
والتسجيل. سنقوم باستيراد الفئات عن طريق إضافة:
use App\User; use Illuminate\Support\Facades\Hash; use Illuminate\Support\Facades\Validator; use Illuminate\Support\Str;
... إلى الجزء العلوي من وحدة التحكم.
الآن ، لإضافة مصادقة Laravel API لمستخدمينا ، سنقوم بإنشاء وظائف login
logout
register
(الاشتراك) في نفس الملف.
ستبدو وظيفة register
كما يلي:
public function register (Request $request) { $validator = Validator::make($request->all(), [ 'name' => 'required|string|max:255', 'email' => 'required|string|email|max:255|unique:users', 'password' => 'required|string|min:6|confirmed', ]); if ($validator->fails()) { return response(['errors'=>$validator->errors()->all()], 422); } $request['password']=Hash::make($request['password']); $request['remember_token'] = Str::random(10); $user = User::create($request->toArray()); $token = $user->createToken('Laravel Password Grant Client')->accessToken; $response = ['token' => $token]; return response($response, 200); }
وظيفة login
مثل هذا:
public function login (Request $request) { $validator = Validator::make($request->all(), [ 'email' => 'required|string|email|max:255', 'password' => 'required|string|min:6|confirmed', ]); if ($validator->fails()) { return response(['errors'=>$validator->errors()->all()], 422); } $user = User::where('email', $request->email)->first(); if ($user) { if (Hash::check($request->password, $user->password)) { $token = $user->createToken('Laravel Password Grant Client')->accessToken; $response = ['token' => $token]; return response($response, 200); } else { $response = ["message" => "Password mismatch"]; return response($response, 422); } } else { $response = ["message" =>'User does not exist']; return response($response, 422); } }
وأخيرًا ، وظيفة logout
:
public function logout (Request $request) { $token = $request->user()->token(); $token->revoke(); $response = ['message' => 'You have been successfully logged out!']; return response($response, 200); }
بعد ذلك ، نحتاج إلى إضافة وظائف تسجيل login
register
والخروج إلى logout
، أي داخل مجموعة المسار الموجودة بالفعل في واجهة برمجة التطبيقات:
Route::group(['middleware' => ['cors', 'json.response']], function () { // ... // public routes Route::post('/login', 'Auth\ApiAuthController@login')->name('login.api'); Route::post('/register','Auth\ApiAuthController@register')->name('register.api'); Route::post('/logout', 'Auth\ApiAuthController@logout')->name('logout.api'); // ... });
أخيرًا ، نحتاج إلى إضافة سمة HasApiToken
إلى نموذج User
. انتقل إلى app/User
وتأكد من أن لديك:
use HasApiTokens, Notifiable;
... في الجزء العلوي من الفصل.
ما لدينا حتى الآن ...
إذا بدأنا خادم التطبيق - على سبيل المثال ، تشغيل php artisan serve
- ثم حاولنا إرسال طلب GET
إلى المسار /api/user
، يجب أن نتلقى الرسالة:
{ "message": "Unauthenticated." }
هذا لأننا غير معتمدين للوصول إلى هذا الطريق. لجعل بعض المسارات التي تختارها محمية ، يمكننا إضافتها إلى routes/api.php
بعد خطوط Route::post
:
Route::middleware('auth:api')->group(function () { // our routes to be protected will go in here });
قبل المضي قدمًا ، سنضيف مسار تسجيل الخروج إلى برنامج auth:api
الوسيط لأن Laravel يستخدم رمزًا مميزًا لتسجيل خروج المستخدم - وهو رمز لا يمكن الوصول إليه من خارج برنامج auth:api
الوسيط. تبدو طرقنا العامة كما يلي:
Route::group(['middleware' => ['cors', 'json.response']], function () { // ... // public routes Route::post('/login', 'Auth\ApiAuthController@login')->name('login.api'); Route::post('/register', 'Auth\ApiAuthController@register')->name('register.api'); // ... });
من ناحية أخرى ، تبدو مساراتنا المحمية كما يلي:
Route::middleware('auth:api')->group(function () { // our routes to be protected will go in here Route::post('/logout', 'Auth\ApiAuthController@logout')->name('logout.api'); });
سننتقل الآن إلى ArticleController
الذي أنشأناه في app/Http/Controllers/ArticleController.php
ونحذف طرق create
edit
في تلك الفئة. بعد ذلك ، سنضيف الجزء التالي من التعليمات البرمجية ، بعد تعديله قليلاً ، إلى كل وظيفة متبقية:
$response = ['message' => '<function name> function']; return response($response, 200);
سنقوم بملء <function name>
بالشكل المناسب. على سبيل المثال ، سيكون هذا كجسم لوظيفة update
:
$response = ['message' => 'update function']; return response($response, 200);
اختبار مصادقة Laravel يدويًا: إنشاء مستخدم
لتسجيل مستخدم ، سنرسل طلب POST
إلى /api/register
بالمعلمات التالية: name
email
(الذي يجب أن يكون فريدًا) password
password_confirmation
.
عندما يتم إنشاء المستخدم ، ستعيد واجهة برمجة التطبيقات رمزًا مميزًا ، والذي سنستخدمه في طلبات أخرى كوسائل للمصادقة.
لتسجيل الدخول ، سنرسل طلب POST
إلى /api/login
. إذا كانت بيانات الاعتماد الخاصة بنا صحيحة ، فسنحصل أيضًا على رمز مميز من واجهة برمجة تطبيقات تسجيل الدخول إلى Laravel بهذه الطريقة.
رمز التفويض الذي حصلنا عليه من هذا الطلب يمكننا استخدامه عندما نريد الوصول إلى طريق محمي. في Postman ، تحتوي علامة التبويب "التفويض" على قائمة منسدلة حيث يمكن تعيين النوع على "رمز حامل" ، وبعد ذلك يمكن أن ينتقل الرمز المميز إلى حقل الرمز المميز.
العملية متشابهة تمامًا في الأرق.
يمكن لمستخدمي cURL القيام بالمثل عن طريق تمرير المعامل -H "Authorization: Bearer <token>"
، حيث <token>
هو رمز التفويض الممنوح من استجابة تسجيل الدخول أو التسجيل.
كما هو الحال مع cURL ، إذا كان المطورون يخططون لاستهلاك واجهة برمجة التطبيقات باستخدام محاور أو مكتبة من هذا النوع ، فيمكنهم إضافة عنوان Authorization
ذي قيمة Bearer <token>
.
دروس Laravel Passport ، الخطوة 4: إنشاء وظيفة إعادة تعيين كلمة المرور
الآن وقد تم إجراء المصادقة الأساسية ، فقد حان الوقت لإعداد وظيفة إعادة تعيين كلمة المرور.

للقيام بذلك ، يمكننا اختيار إنشاء دليل وحدة تحكم api_auth
، وإنشاء وحدات تحكم مخصصة جديدة ، وتنفيذ الوظيفة ؛ أو يمكننا تحرير وحدات تحكم المصادقة التي يمكننا إنشاؤها باستخدام Laravel. في هذه الحالة ، سنقوم بتحرير وحدات تحكم المصادقة ، نظرًا لأن التطبيق بأكمله عبارة عن واجهة برمجة تطبيقات.
أولاً ، سننشئ وحدات تحكم المصادقة عن طريق تشغيل:
composer require laravel/ui php artisan ui vue --auth
سنقوم بتحرير الفصل في app/Http/Controllers/Auth/ForgotPasswordController.php
، مع إضافة هاتين الطريقتين:
protected function sendResetLinkResponse(Request $request, $response) { $response = ['message' => "Password reset email sent"]; return response($response, 200); } protected function sendResetLinkFailedResponse(Request $request, $response) { $response = "Email could not be sent to this email address"; return response($response, 500); }
بعد ذلك ، نحتاج إلى إعداد وحدة التحكم التي تعيد تعيين كلمة المرور بالفعل ، لذلك سننتقل إلى app/Http/Controllers/Auth/ResetPasswordController.php
وتجاوز الوظائف الافتراضية مثل هذا:
protected function resetPassword($user, $password) { $user->password = Hash::make($password); $user->save(); event(new PasswordReset($user)); } protected function sendResetResponse(Request $request, $response) { $response = ['message' => "Password reset successful"]; return response($response, 200); } protected function sendResetFailedResponse(Request $request, $response) { $response = "Token Invalid"; return response($response, 401); }
نحتاج أيضًا إلى استيراد بعض الفئات في وحدة التحكم عن طريق إضافة:
use Illuminate\Auth\Events\PasswordReset; use Illuminate\Http\Request; use Illuminate\Support\Facades\Hash;
... إلى الجزء العلوي من وحدة التحكم.
سنرغب أيضًا في تعديل أي إشعار بالبريد الإلكتروني يتم استخدامه ، لأن إشعار البريد الذي يأتي مع Laravel لا يستخدم رموز واجهة برمجة التطبيقات (API) للترخيص. يمكننا إنشاء واحد جديد ضمن app/Notifications
عن طريق تشغيل هذا الأمر:
php artisan make:notification MailResetPasswordNotification
سنحتاج إلى تعديل ملف app/Notifications/MailResetPasswordNotification.php
لتبدو كما يلي:
<?php namespace App\Notifications; use Illuminate\Bus\Queueable; use Illuminate\Notifications\Messages\MailMessage; use Illuminate\Auth\Notifications\ResetPassword; use Illuminate\Support\Facades\Lang; class MailResetPasswordNotification extends ResetPassword { use Queueable; protected $pageUrl; public $token; /** * Create a new notification instance. * * @param $token */ public function __construct($token) { parent::__construct($token); $this->pageUrl = 'localhost:8080'; // we can set whatever we want here, or use .env to set environmental variables } /** * Get the notification's delivery channels. * * @param mixed $notifiable * @return array */ public function via($notifiable) { return ['mail']; } /** * Get the mail representation of the notification. * * @param mixed $notifiable * @return \Illuminate\Notifications\Messages\MailMessage */ public function toMail($notifiable) { if (static::$toMailCallback) { return call_user_func(static::$toMailCallback, $notifiable, $this->token); } return (new MailMessage) ->subject(Lang::getFromJson('Reset application Password')) ->line(Lang::getFromJson('You are receiving this email because we received a password reset request for your account.')) ->action(Lang::getFromJson('Reset Password'), $this->pageUrl."?token=".$this->token) ->line(Lang::getFromJson('This password reset link will expire in :count minutes.', ['count' => config('auth.passwords.users.expire')])) ->line(Lang::getFromJson('If you did not request a password reset, no further action is required.')); } /** * Get the array representation of the notification. * * @param mixed $notifiable * @return array */ public function toArray($notifiable) { return [ // ]; } }
للاستفادة من هذا الإشعار الجديد ، نحتاج إلى تجاوز طريقة sendPasswordResetNotification
التي يرثها User
من فئة Authenticatable
. كل ما نحتاجه هو إضافة هذا إلى app/User.php
:
public function sendPasswordResetNotification($token) { $this->notify(new \App\Notifications\MailResetPasswordNotification($token)); }
مع إعداد بريد يعمل بشكل صحيح ، يجب أن تعمل الإشعارات في هذه المرحلة.
كل ما تبقى الآن هو التحكم في وصول المستخدم.
دروس Laravel Passport ، الخطوة 5: إنشاء برنامج وسيط للتحكم في الوصول
قبل إنشاء برمجية وسيطة للتحكم في الوصول ، سنحتاج إلى تحديث جدول user
للحصول على عمود يسمى type
، والذي سيتم استخدامه لتحديد مستوى المستخدم: النوع 0 مستخدم عادي ، والنوع 1 مسؤول ، والنوع 2 هو مشرف من الدرجة الأولى.
لتحديث جدول user
، يتعين علينا إنشاء ترحيل عن طريق تشغيل هذا:
php artisan make:migration update_users_table_to_include_type --table=users
في الملف الذي تم إنشاؤه حديثًا database/migrations/[timestamp]_update_users_table.php
، سنحتاج إلى تحديث وظائف up
و down
لإضافة عمود type
وإزالته ، على التوالي:
public function up() { Schema::table('users', function (Blueprint $table) { $table->integer('type'); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::table('users', function (Blueprint $table) { $table->dropIfExists('type'); }); }
بعد ذلك ، سنقوم بتشغيل php artisan migrate
. بمجرد الانتهاء من ذلك ، يتعين علينا تحرير وظيفة register
الخاصة بنا في ملف ApiAuthController.php
، مع إضافة هذا قبل السطر الذي يحتوي على $user = User::create($request->toArray());
:
$request['type'] = $request['type'] ? $request['type'] : 0;
سنحتاج أيضًا إلى إضافة هذا السطر إلى مصفوفة $validator
:
'type' => 'integer',
سيجعل أول هذين التعديلين جميع المستخدمين المسجلين "مستخدمين عاديين" افتراضيًا ، أي إذا لم يتم إدخال نوع مستخدم.
البرنامج الوسيط للتحكم في الوصول نفسه
نحن الآن في وضع يسمح لنا بإنشاء جزأين من البرامج الوسيطة لاستخدامهما في التحكم في الوصول: أحدهما للمسؤولين والآخر للمشرفين المتميزين.
لذلك سنجري:
php artisan make:middleware AdminAuth php artisan make:middleware SuperAdminAuth
أولاً ، سننتقل إلى app/Http/Middleware/AdminAuth.php
واستيراد Illuminate\Support\Facades\Auth
، ثم نعدل وظيفة handle
كما يلي:
public function handle($request, Closure $next) { if (Auth::guard('api')->check() && $request->user()->type >= 1) { return $next($request); } else { $message = ["message" => "Permission Denied"]; return response($message, 401); } }
سنحتاج أيضًا إلى تعديل وظيفة handle
في app/Http/Middleware/SuperAdminAuth.php
:
public function handle($request, Closure $next) { if (Auth::guard('api')->check() && $request->user()->type >= 2) { return $next($request); } else { $message = ["message" => "Permission Denied"]; return response($message, 401); } }
يجب عليك أيضًا استيراد فئة Auth
في أعلى كلا الملفين عن طريق إضافة:
use Illuminate\Support\Facades\Auth;
... إلى أسفل الواردات الموجودة هناك.
من أجل استخدام برمجتنا الوسيطة الجديدة ، سنشير إلى كلا الصنفين في النواة - على سبيل المثال ، في app/Http/Kernel.php
- بإضافة الأسطر التالية إلى مصفوفة $routeMiddleware
:
'api.admin' => \App\Http\Middleware\AdminAuth::class, 'api.superAdmin' => \App\Http\Middleware\SuperAdminAuth::class,
إذا أراد المطورون استخدام البرامج الوسيطة في مسار معين ، فكل ما عليك فعله هو إضافتها إلى وظيفة المسار كما يلي:
Route::post('route','Controller@method')->middleware('<middleware-name-here>');
<middleware-name-here>
في هذه الحالة يمكن أن يكون api.admin
، api.superAdmin
، إلخ ، حسب الاقتضاء.
هذا كل ما نحتاجه لإنشاء برمجتنا الوسيطة.
ضع كل شيء معا
من أجل اختبار عمل المصادقة والتحكم في الوصول لدينا ، هناك بعض الخطوات الإضافية التي يجب اتباعها.
اختبار مصادقة Laravel والتحكم في الوصول: الخطوة 1
نحتاج إلى تعديل وظيفة index
ArticleController
وتسجيل المسار. (في مشاريع العالم الحقيقي ، سنستخدم PHPUnit ونفعل ذلك كجزء من اختبار آلي. هنا ، نضيف مسارًا يدويًا لأغراض الاختبار - يمكن إزالته بعد ذلك.)
سننتقل إلى وحدة تحكم ArticleController
في app/Http/Controllers/ArticleController
بتعديل وظيفة index
لتبدو كما يلي:
public function index() { $response = ['message' => 'article index']; return response($response, 200); }
بعد ذلك ، سنقوم بتسجيل الوظيفة في مسار بالانتقال إلى ملف routes/api.php
وإلحاق هذا:
Route::middleware('auth:api')->group(function () { Route::get('/articles', 'ArticleController@index')->name('articles'); });
اختبار مصادقة Laravel والتحكم في الوصول: الخطوة 2
يمكننا الآن محاولة الوصول إلى المسار بدون رمز المصادقة. يجب أن نتلقى خطأ في المصادقة.
اختبار مصادقة Laravel والتحكم في الوصول: الخطوة 3
يمكننا أيضًا محاولة الوصول إلى نفس المسار باستخدام رمز ترخيص (الرمز الذي حصلنا عليه من التسجيل أو تسجيل الدخول سابقًا في هذه المقالة).
في بعض الأحيان ، قد يتسبب هذا في حدوث خطأ مشابه لهذا:
Unknown column 'api_token' in 'where clause' (SQL: select * from `users` where `api_token` = ...
إذا حدث هذا ، يجب على المطورين التأكد من تشغيل ترحيل Passport وتعيين ['guards']['api']['driver']
على passport
في config/auth.php
:
'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'api' => [ 'driver' => 'passport', 'provider' => 'users', ], ],
بعد ذلك ، تحتاج ذاكرة التخزين المؤقت للتكوين إلى التحديث أيضًا.
بمجرد إصلاح ذلك ، يجب أن نتمكن من الوصول إلى الطريق.
اختبار مصادقة Laravel والتحكم في الوصول: الخطوة 4
حان الوقت لاختبار التحكم في الوصول. دعنا ->middleware('api.admin')
المقالات ، لذا يبدو كالتالي:
Route::get('/articles', 'ArticleController@index')->middleware('api.admin')->name('articles');
لقد صنعنا ذلك بحيث يتم تعيين النوع 0 تلقائيًا للمستخدم الذي تم إنشاؤه حديثًا ، كما يمكننا أن نرى عبر مسار api/user
.
لهذا السبب ، يجب أن نحصل على خطأ أثناء محاولة الوصول إلى نقطة نهاية articles
كمستخدم.
لغرض الاختبار ، دعنا نعدل المستخدم في قاعدة البيانات ليحصل على type
1. بعد التحقق من هذا التغيير عبر مسار api/user
مرة أخرى ، نحن على استعداد للمحاولة مرة أخرى للحصول على / GET
/articles/
route.
إنه يعمل بشكل مثالي.
يجب على المطورين الذين يقومون بإنشاء تطبيقات أكثر تعقيدًا ملاحظة أن عناصر التحكم في الوصول المناسبة لن تكون بهذه البساطة. في هذه الحالة ، يمكن استخدام تطبيقات الطرف الثالث الأخرى أو بوابات وسياسات Laravel لتنفيذ التحكم في وصول المستخدم المخصص. في الجزء الثاني من هذه السلسلة ، سننظر في حلول تحكم في الوصول أكثر قوة ومرونة.
مصادقة Laravel API: ما تعلمناه
ناقشنا في هذا البرنامج التعليمي لـ Laravel Passport:
- إنشاء وحدة تحكم وهمية ونموذج لاستخدام شيء ما أثناء اختبار مثال Laravel Passport.
- إنشاء البرامج الوسيطة اللازمة لجعل API الخاص بنا يعمل بسلاسة ، ومعالجة CORS وإجبار API على إرجاع استجابات JSON دائمًا.
- إعداد مصادقة Laravel API الأساسية: التسجيل وتسجيل الدخول وتسجيل الخروج.
- إعداد وظيفة "إعادة تعيين كلمة المرور" بناءً على الإعدادات الافتراضية في Laravel.
- إنشاء برمجيات وسيطة للتحكم في الوصول لإضافة مستويات أذونات ترخيص المستخدم إلى مسارات مختلفة.
هذه مهارات أساسية لأي شخص يعمل في مجال خدمات تطوير Laravel. سيجد القراء النتيجة النهائية في GitHub repo ويجب أن يكونوا الآن في وضع جيد لتنفيذ المصادقة مع Laravel. نحن نتطلع إلى التعليقات أدناه.