انتقل إلى محتوى الدرس
الدرس 44
دورة إطار العمل Laravel

بناء تدفقات التسجيل والدخول والخروج وتجديد الجلسة في LaravelBuilding Registration Login and Logout Flows in Laravel

بناء نظام تسجيل المستخدمين والتحقق من بيانات الدخول عبر Auth::attempt وتجديد معرف الجلسة لمنع الاختطاف وتسجيل الخروج الآمن.
أقسام الدرس
6
الأمثلة
6
اللغة
العربية
تاريخ النشر
غير محدد
المشاهدات
0
محتوى الدرس
في هذا الدرس 6تصفّح المواضيع

تبدأ عملية تسجيل الحساب الجديد بالتحقق من الاسم وتفرد البريد الإلكتروني وتطابق تأكيد كلمة المرور، ثم إنشاء سجل المستخدم عبر User::create وتسجيل دخوله فوراً بدالة Auth::login. وبفضل وجود المحول hashed في نموذج User، يتم تجزئة كلمة المرور المدخلة تلقائياً لحظة الإنشاء.

  • تفرد البريد الإلكتروني (unique:users): التحقق من عدم وجود حساب سابق مسجل بنفس البريد الإلكتروني في جدول المستخدمين.
  • تأكيد كلمة المرور (confirmed Rule): إلزام المستخدم بتكرار كلمة المرور في حقل password_confirmation لمنع أخطاء الكتابة.
  • تسجيل الدخول الفوري (Auth::login): فتح جلسة موثقة للمستخدم الجديد فور إنشاء حسابه دون مطالبته بالدخول مجدداً.
مخطط معماري يوضح بناء تدفقات التسجيل والدخول والخروج وتجديد الجلسة في Laravel في إطار العمل Laravel 12
PHP
$data = $request->validate([
    'name' => ['required', 'string', 'max:100'],
    'email' => ['required', 'email', 'unique:users'],
    'password' => ['required', 'min:8', 'confirmed'],
]);
$user = User::create($data);
Auth::login($user);

عند إرسال نموذج تسجيل الدخول، مرر مصفوفة البريد الإلكتروني وكلمة المرور إلى دالة Auth::attempt. يقوم Laravel خلف الكواليس بالبحث عن المستخدم بالبريد وفحص تطابق البصمة عبر Hash::check، فإذا تطابقت يفتح جلسة المستخدم ويفعل خيار تذكرني عند تمرير القيمة المنطقية الثانية.

  • البحث والفحص المدمج (Auto Verify): تجلب المستخدم بالبريد وتفحص بصمة كلمة المرور بخطوة واحدة نظيفة.
  • ميزة تذكرني (Remember Me): مرر قيمة مربع الاختيار remember كمعامل ثانٍ لإصدار كوكي دخول مشفر طويل الأمد.
  • رسالة خطأ موحدة (Safe Error): أظهر رسالة فشل عامة عند عدم التطابق لمنع المهاجمين من معرفة البريد المسجل.
PHP
$credentials = $request->validate([
    'email' => ['required', 'email'],
    'password' => ['required'],
]);

if (Auth::attempt($credentials, $request->boolean('remember'))
    // Login succeeded!
}

فور نجاح التحقق عبر Auth::attempt، يجب استدعاء دالة $request->session->regenerate لتوليد معرف جلسة جديد تماماً مع الاحتفاظ بالبيانات الحالية. يمنع هذا الإجراء هجمات تثبيت الجلسة Session Fixation التي يحاول فيها المهاجم فرض معرف جلسة معروف مسبقاً على الضحية.

  • تجديد معرف الجلسة (regenerate): يصدر معرف جلسة جديداً فور ترقية حالة الزائر إلى مستخدم مسجل.
  • التوجيه لصفحة المقصد (intended Redirect): يعيد المستخدم تلقائياً إلى الصفحة المحمية التي حاول زيارتها قبل مطالبته بالدخول.
  • المسار الاحتياطي (Fallback Route): مرر مسار لوحة التحكم كقيمة افتراضية لدالة intended في حال الدخول المباشر.
PHP
if (Auth::attempt($credentials)) {
    $request->session()->regenerate();
    return redirect()->intended('/dashboard');
}
return back()->withErrors(['email' => 'Invalid credentials.'])

بمجرد تسجيل دخول المستخدم، يمكنك الوصول إلى كائن نموذج User الخاص به في أي مكان داخل التطبيق عبر Auth::user أو $request->user. ولجلب المعرف الرقمي فقط استخدم Auth::id، بينما تفحص دالة Auth::check ما إذا كان الزائر الحالي مسجلاً للدخول.

  • كائن المستخدم (Auth::user): يعيد نسخة نموذج User للمستخدم الحالي أو قيمة null إذا كان زائراً.
  • معرف المستخدم (Auth::id): يعيد رقم المعرف الأساسي للمستخدم المسجل مباشرة لاستخدامه في الاستعلامات.
  • فحص حالة الدخول (Auth::check): يعيد القيمة المنطقية true إذا كان الطلب الحالي مرتبطاً بجلسة موثقة.
PHP
use Illuminate\Support\Facades\Auth;

if (Auth::check()) {
    $user = $request->user();
    $userId = Auth::id();
}

يتطلب تسجيل الخروج الآمن ثلاث خطوات مترابطة داخل إجراء متحكم من نوع POST: استدعاء Auth::logout، ثم إبطال الجلسة بالكامل عبر invalidate، وأخيراً تجديد رمز الحماية عبر regenerateToken. نفذ الخروج دائماً عبر نموذج POST محمي بتوجيه @csrf وليس عبر رابط GET عادي.

  • مسح هوية الحارس (Auth::logout): يزيل حالة المصادقة من الحارس ويلغي كوكي تذكرني إن وجد.
  • إبطال الجلسة (invalidate): يمسح كافة بيانات الجلسة المخزنة في الخادم ويغير معرفها.
  • تدوير رمز الحماية (regenerateToken): يجدد رمز CSRF لمنع إرسال أي نماذج قديمة مفتوحة في نوافذ أخرى.
PHP
public function destroy(Request $request)
{
    Auth::logout();
    $request->session()->invalidate();
    $request->session()->regenerateToken();
    return redirect('/');
}

تتكامل دورة حياة المصادقة في Laravel عبر دمج Auth::login عند التسجيل، و Auth::attempt مع تجديد الجلسة عند الدخول، وإبطال الجلسة وتدوير رمز CSRF عند الخروج. يضمن الالتزام بهذا التسلسل القياسي حماية المستخدمين من اختطاف الجلسات وتسرب بيانات الاعتماد.

وجه المقارنة الهندسيالأسلوب اليدوي أو غير المحسنمعيار Laravel 12 الحديث
فحص بيانات الدخولالاستعلام اليدوي عن البريد وفحص التجزئة داخل المتحكماستدعاء دالة Auth::attempt الموحدة مع دعم ميزة تذكرني
الجلسة بعد الدخولالإبقاء على معرف الجلسة القديم السابق لتسجيل الدخولاستدعاء دالة regenerate لتوليد معرف جلسة جديد وآمن
رسالة فشل الدخولالتفريق بين خطأ البريد وخطأ كلمة المرور وكشف الحساباتإرجاع رسالة خطأ موحدة مع الاحتفاظ بحقل البريد فقط
تنفيذ تسجيل الخروجوضع رابط GET يستدعي دالة الخروج فقط دون مسح الجلسةاستخدام مسار POST ينفذ logout ثم invalidate ثم regenerateToken
PHP
// Complete Login Action:
if (Auth::attempt($request->only('email', 'password'))) {
    $request->session()->regenerate();
    return redirect()->intended('/dashboard');
}
خلاصة المعرفة ومحطة الانتقال

ملخص الدرس

حصاد الدرس

مراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي

ماذا تعلّمت في هذا الدرس؟

أتقنت في هذا الدرس حول «بناء تدفقات التسجيل والدخول والخروج وتجديد الجلسة في Laravel» مفاهيم بناء عملية تسجيل حساب جديد، والتحقق من الدخول عبر Attempt، وتجديد الجلسة ومنع اختطافها وفق معايير Laravel 12 الحديثة.

الخطوة التالية والدرس القادم

انتقل الآن إلى الدرس التالي «حماية المسارات وتوجيهات المصادقة وتحديد معدل الطلبات» للبناء التراكمي على ما تعلمته.

مشاركة

هل كان هذا الدرس مفيدًا؟

جارٍ تحميل الآراء…

ابنِ لغتك البرمجية

المصطلحات4

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 4 مفهومةأول بطاقة، أول خطوة
01 Login Flows تسجيل الدخول
بناء نظام تسجيل المستخدمين والتحقق من بيانات الدخول عبر Auth::attempt وتجديد معرف الجلسة لمنع الاختطاف وتسجيل الخروج الآمن.
للمراجعة
02 Building User Registration Flow بناء عملية تسجيل حساب جديد
المفهوم الهندسي والتطبيق العملي المباشر لقسم بناء عملية تسجيل حساب جديد في إطار العمل Laravel 12.
للمراجعة
03 Authenticating With Auth Attempt التحقق من الدخول عبر Attempt
المفهوم الهندسي والتطبيق العملي المباشر لقسم التحقق من الدخول عبر Attempt في إطار العمل Laravel 12.
للمراجعة
04 Preventing Session Fixation Attacks تجديد الجلسة ومنع اختطافها
المفهوم الهندسي والتطبيق العملي المباشر لقسم تجديد الجلسة ومنع اختطافها في إطار العمل Laravel 12.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

حروف قليلة. معنى كامل.

الاختصارات4

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 4 مفهومةأول بطاقة، أول خطوة
01 MVC MVC
Model View Controller
النمط المعماري الذي يفصل بين نماذج البيانات Models، وطبقات العرض Views، والمتحكمات Controllers في Laravel.
للمراجعة
02 CLI CLI
Command Line Interface
واجهة سطر الأوامر التي تعمل عبر أداة php artisan لتوليد الملفات وإدارة التطبيق.
للمراجعة
03 HTTP HTTP
Hypertext Transfer Protocol
بروتوكول نقل النص الفائق الذي ينظم طلبات المتصفح واستجابات خادم Laravel.
للمراجعة
04 PSR PSR
PHP Standards Recommendations
المعايير القياسية للغة PHP مثل التحميل التلقائي PSR-4 التي يلتزم بها إطار العمل Laravel.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

من الفهم للتطبيق

مهامك قبل الاختبار

خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.

0/2مهام منجزة
  1. اكتب ونفّذ المثال البرمجي المشروح في قسم «بناء عملية تسجيل حساب جديد» داخل مشروع Laravel 12 المحلي وتحقق من النتيجة.

  2. بدّل بين الحالات الثلاث في المحاكي التفاعلي ضمن قسم «التحقق من الدخول عبر Attempt» وقارن مخرجات التنفيذ.

تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.

مساحة التحدي

اختبر فهمك.
ووصلها للإتقان.

كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.

8أسئلة 3أنواع تحديات 100%هدف الإتقان
تصحيح تلقائي. فرص بلا حدود.

أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.

الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.

لمحة عن التحدي8 أسئلة تنتظرك
01

ما الهدف الهندسي الأساسي من بناء عملية تسجيل حساب جديد في إطار العمل Laravel 12؟

يسهم بناء عملية تسجيل حساب جديد في تنظيم منطق التطبيق بأسلوب معياري آمن وقابل للصيانة في Laravel 12.

02

يساعد الالتزام باصطلاحات Laravel 12 الرسمية في قسم «التحقق من الدخول عبر Attempt» على رفع جودة الكود وسهولة اختباره آلياً.

صواب؛ الالتزام بالمعايير القياسية في Laravel 12 يجعل الكود واضحاً وسهل الفحص والصيانة.

03

أي آلية في Laravel 12 تتولى إدارة تجديد الجلسة ومنع اختطافها بشكل مباشر ومنظم؟

توفر طبقة إطار العمل وحاوية الخدمات في Laravel 12 الأدوات القياسية لإدارة تجديد الجلسة ومنع اختطافها.

04

لماذا يُعد تطبيق الوصول لبيانات المستخدم المسجل مهماً عند بناء تطبيقات Laravel 12 جاهزة للإنتاج؟

لأنه يمنع الأخطاء البرمجية الخفية ويوحد سلوك التطبيق بين بيئتي التطوير والإنتاج.

05

في Laravel 12، يُنصح بكتابة مفاتيح الإنتاج السرية مباشرة داخل ملفات الكود المصدري المرفوعة إلى Git بدلاً من ملفات البيئة.

خطأ؛ يجب حفظ المفاتيح والبيانات السرية في متغيرات البيئة وعدم رفعها أبداً إلى مستودع Git.

06

ما المزايا الهندسية التي يحققها تطبيق تسجيل الخروج الآمن وإبطال الجلسة في Laravel 12؟ (اختر كل ما ينطبق)

يوفر فصلاً واضحاً للمسؤوليات، وأماناً أعلى أثناء التنفيذ، وتعاوناً أسهل بين أفراد الفريق.

07

يوظف إطار العمل Laravel 12 ميزات PHP 8 الحديثة مثل تحديد أنواع القيم المرجعة لجعل الكود أكثر وضوحاً وأماناً.

صواب؛ يعتمد Laravel 12 بشكل كامل على الصياغة الحديثة للغة PHP 8.2+ وسلامة الأنواع.

08

ما الفرق الجوهري بين معيار Laravel 12 الحديث والملفات اليدوية التقليدية في ملخص تدفقات التسجيل والدخول؟

يوفر Laravel 12 واجهات قياسية موحدة وحماية مدمجة تغني عن الكود اليدوي المعرض للأخطاء.