البرمجة

استيثاق المستخدمين في Laravel 5

استيثاق المستخدمين (User Authentication) في Laravel 5: نظرة موسعة وعميقة

تُعد عملية استيثاق المستخدمين (User Authentication) من الركائز الأساسية في تصميم وتطوير تطبيقات الويب، حيث تُوفر الطبقة الأولى من الحماية للوصول إلى البيانات والوظائف الحساسة. ومع انتشار هياكل العمل الحديثة (Frameworks)، قدّمت Laravel، أحد أشهر إطارات عمل PHP، نظام استيثاق متكامل ومرن يمكّن المطورين من تنفيذ آليات التحقق وتسجيل الدخول والتسجيل بكل كفاءة. ورغم التطور الكبير الذي شهدته إصدارات Laravel الحديثة، فإن Laravel 5 ظل يمثل مرحلة انتقالية مهمة من حيث بنية النظام وخصائص الاستيثاق، خاصة مع إدخال العديد من المزايا الجديدة على الحماية وتعدد أنظمة المصادقة.

يتناول هذا المقال، من منظور تقني وتطبيقي، كل جوانب استيثاق المستخدمين في Laravel 5، بداية من آلية العمل، مرورًا بالبنية الداخلية، وصولًا إلى كيفية التخصيص والتوسعة، مع تقديم شرح تفصيلي لكل خطوة وملف ووظيفة يتم استخدامها ضمن هذه المنظومة، مما يمنح القارئ صورة شاملة عن كيفية بناء نظام استيثاق متكامل باستخدام Laravel 5.


مقدمة حول نظام الاستيثاق في Laravel 5

اعتمد Laravel 5 على مكونات جاهزة ومبسطة لتقديم وظائف الاستيثاق، حيث دمج النظام في البنية الأساسية للإطار من خلال خصائص مثل Middleware، وGuards، وProviders، وTraits. وقدّم Laravel 5 لأول مرة نظامًا متكاملاً يعتمد على مكتبة Illuminate\Auth، ويُمكن تشغيله باستخدام بعض الأوامر الأساسية مثل:

bash
php artisan make:auth

هذا الأمر كان كافيًا لإنشاء جميع ملفات الواجهات Views الخاصة بالتسجيل وتسجيل الدخول، بالإضافة إلى المسارات (Routes)، والمتحكمات (Controllers)، والموجهات الوسيطة (Middleware).


المكونات الرئيسية لنظام الاستيثاق

نظام الاستيثاق في Laravel 5 مبني على أربعة مكونات أساسية:

1. Guards

تُحدد طريقة المصادقة المستخدمة، سواء عبر الجلسة (Session) أو رمز (Token). الحارس الافتراضي في Laravel 5 هو web والذي يستخدم جلسات المتصفح للاحتفاظ بحالة المصادقة.

2. Providers

تُحدد كيفية جلب المستخدمين من قاعدة البيانات. يتم الاعتماد عادةً على Eloquent ORM للوصول إلى جدول المستخدمين (users)، ولكن يمكن استخدام Database provider إذا كان المطلوب الوصول إلى قاعدة البيانات بشكل مباشر.

3. Middleware

تلعب دور الحارس عند محاولة الوصول إلى مسار يتطلب تحقق الهوية. المثال الأكثر شيوعًا هو:

php
Route::get('/dashboard', function () { // ... })->middleware('auth');

4. Traits

تستخدم Laravel Traits لتوفير وظائف مدمجة جاهزة مثل تسجيل المستخدم وتسجيل الخروج وتحديث كلمات المرور، وذلك عبر استخدام Traits مثل:

php
use Illuminate\Foundation\Auth\AuthenticatesUsers;

ملفات النظام الخاصة بالاستيثاق

ملف config/auth.php

هذا الملف يتحكم في إعدادات الاستيثاق ويحتوي على خيارات الحراس (guards) والمزودين (providers). بنية الملف تكون كما يلي:

php
'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], ], 'providers' => [ 'users' => [ 'driver' => 'eloquent', 'model' => App\User::class, ], ],

إنشاء نظام الاستيثاق في Laravel 5

1. إنشاء المشروع

bash
composer create-project laravel/laravel blog "5.*"

2. إعداد قاعدة البيانات

يتم تعديل ملف .env لتحديد الاتصال بقاعدة البيانات:

ini
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=blog DB_USERNAME=root DB_PASSWORD=

ثم يتم تنفيذ أمر الهجرة لإنشاء الجداول المطلوبة:

bash
php artisan migrate

3. إنشاء ملفات المصادقة تلقائيًا

bash
php artisan make:auth

ينتج عن هذا الأمر إنشاء واجهات تسجيل الدخول والتسجيل، ومسارات المصادقة في ملف routes/web.php، والمتحكم Auth\AuthController المسؤول عن تنفيذ المنطق الأساسي.


شرح المتحكمات الخاصة بالاستيثاق

المتحكم LoginController

يتولى مسؤولية تسجيل الدخول ويستخدم Trait AuthenticatesUsers الذي يحتوي على الدوال:

  • login(): لتنفيذ عملية التحقق.

  • logout(): لتسجيل الخروج.

  • redirectTo: لتحديد الوجهة بعد تسجيل الدخول.

المتحكم RegisterController

يستخدم Trait RegistersUsers ويحتوي على:

  • validator(array $data): للتحقق من صحة البيانات.

  • create(array $data): لإنشاء مستخدم جديد.


الواجهات Views الخاصة بالاستيثاق

تُنشأ في مجلد resources/views/auth/ وتحتوي على:

  • login.blade.php

  • register.blade.php

  • passwords/email.blade.php

  • passwords/reset.blade.php

كما يُنشأ ملف layouts/app.blade.php الذي يُستخدم كقالب عام للواجهات.


استخدام Middleware لحماية المسارات

في Laravel 5، يتم فرض الحماية على المسارات التي تتطلب مصادقة عبر الوسيط auth، كما يمكن تقييد الوصول للمستخدمين الضيوف باستخدام guest.

php
Route::group(['middleware' => 'auth'], function () { Route::get('/dashboard', 'DashboardController@index'); });

تخصيص نموذج المستخدم User Model

يوجد النموذج في app/User.php، وهو الوريث للنموذج الأساسي Authenticatable. يحتوي على خصائص مثل:

php
protected $fillable = [ 'name', 'email', 'password', ];

ولإخفاء الحقول من الإخراج:

php
protected $hidden = [ 'password', 'remember_token', ];

التعامل مع إعادة تعيين كلمات المرور

توفر Laravel نظامًا مدمجًا لإعادة تعيين كلمات المرور باستخدام البريد الإلكتروني. يشمل:

  • جدول password_resets

  • ملفات الواجهة في views/passwords/

  • البريد الإلكتروني يتم إرساله تلقائيًا باستخدام Notification ضمن Laravel.


تسجيل الخروج

تُنفذ عملية تسجيل الخروج عبر دالة logout() الموجودة ضمن Trait AuthenticatesUsers:

php
public function logout(Request $request) { Auth::logout(); return redirect('/'); }

تخصيص الحراس Guards

يمكن إنشاء حراس إضافيين لحماية مسارات مختلفة بناءً على نوع المستخدم (مثال: مشرفون، زوار، أعضاء):

php
'guards' => [ 'admin' => [ 'driver' => 'session', 'provider' => 'admins', ], ], 'providers' => [ 'admins' => [ 'driver' => 'eloquent', 'model' => App\Admin::class, ], ],

ثم يمكن إنشاء Middleware مخصص لحماية مسارات المشرفين:

php
php artisan make:middleware AdminMiddleware

نموذج لجدول المستخدمين في Laravel 5

الحقل النوع الوصف
id INT المعرف الفريد للمستخدم
name VARCHAR(255) اسم المستخدم
email VARCHAR(255) البريد الإلكتروني
password VARCHAR(255) كلمة المرور المشفرة
remember_token VARCHAR(100) رمز الجلسة التذكيري
created_at TIMESTAMP تاريخ الإنشاء
updated_at TIMESTAMP تاريخ آخر تعديل

تخصيص عمليات الاستيثاق

يمكنك تعديل عملية التحقق من البريد الإلكتروني أو إضافة شروط إضافية عبر إعادة كتابة دالة credentials() في LoginController:

php
protected function credentials(Request $request) { return [ 'email' => $request->email, 'password' => $request->password, 'active' => 1, // شرط إضافي ]; }

تحديث كلمات المرور

يمكن للمستخدم تغيير كلمة مروره من خلال الواجهات الجاهزة، أو يمكن إنشاء واجهة خاصة، وربطها بمتحكم جديد يحتوي على الدالة:

php
public function updatePassword(Request $request) { $request->validate([ 'old_password' => 'required', 'new_password' => 'required|min:6|confirmed', ]); $user = auth()->user(); if (!Hash::check($request->old_password, $user->password)) { return back()->with('error', 'كلمة المرور القديمة غير صحيحة'); } $user->password = bcrypt($request->new_password); $user->save(); return back()->with('status', 'تم تغيير كلمة المرور بنجاح'); }

تسجيل الأحداث أثناء عمليات الدخول

Laravel 5 يتيح تسجيل أحداث مخصصة مثل تسجيل الدخول الفاشل أو الناجح، من خلال Events وListeners:

bash
php artisan make:event UserLoggedIn php artisan make:listener LogSuccessfulLogin

كما يمكن الاشتراك في أحداث النظام الجاهزة مثل:

php
Event::listen('Illuminate\Auth\Events\Login', function ($event) { // تنفيذ إجراء معين });

المصادر والمراجع


هذا المقال يمثل مرجعًا تقنيًا شاملاً لكل من يسعى لفهم واستغلال إمكانيات استيثاق المستخدمين في Laravel 5 بعمق واحترافية، مع التركيز على البنية التحتية لهذا النظام وكيفية التحكم به وتخصيصه وتوسيعه بما يتوافق مع احتياجات المشاريع المختلفة.