في هذا الدرس 6تصفّح المواضيع
تبدأ عملية تسجيل الحساب الجديد بالتحقق من الاسم وتفرد البريد الإلكتروني وتطابق تأكيد كلمة المرور، ثم إنشاء سجل المستخدم عبر User::create وتسجيل دخوله فوراً بدالة Auth::login. وبفضل وجود المحول hashed في نموذج User، يتم تجزئة كلمة المرور المدخلة تلقائياً لحظة الإنشاء.
- تفرد البريد الإلكتروني (unique:users): التحقق من عدم وجود حساب سابق مسجل بنفس البريد الإلكتروني في جدول المستخدمين.
- تأكيد كلمة المرور (confirmed Rule): إلزام المستخدم بتكرار كلمة المرور في حقل password_confirmation لمنع أخطاء الكتابة.
- تسجيل الدخول الفوري (Auth::login): فتح جلسة موثقة للمستخدم الجديد فور إنشاء حسابه دون مطالبته بالدخول مجدداً.
$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): أظهر رسالة فشل عامة عند عدم التطابق لمنع المهاجمين من معرفة البريد المسجل.
$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 في حال الدخول المباشر.
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 إذا كان الطلب الحالي مرتبطاً بجلسة موثقة.
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 لمنع إرسال أي نماذج قديمة مفتوحة في نوافذ أخرى.
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 |
// Complete Login Action:
if (Auth::attempt($request->only('email', 'password'))) {
$request->session()->regenerate();
return redirect()->intended('/dashboard');
}
ملخص الدرس
حصاد الدرسمراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي
ماذا تعلّمت في هذا الدرس؟
أتقنت في هذا الدرس حول «بناء تدفقات التسجيل والدخول والخروج وتجديد الجلسة في Laravel» مفاهيم بناء عملية تسجيل حساب جديد، والتحقق من الدخول عبر Attempt، وتجديد الجلسة ومنع اختطافها وفق معايير Laravel 12 الحديثة.
الخطوة التالية والدرس القادم
انتقل الآن إلى الدرس التالي «حماية المسارات وتوجيهات المصادقة وتحديد معدل الطلبات» للبناء التراكمي على ما تعلمته.
سجّل الدخول لحفظ تقدمك
تابع إنجاز المواضيع والمصطلحات والمهام، وكمّل من آخر خطوة على أي جهاز.
المصطلحات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
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 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.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
مهامك قبل الاختبار
خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.
-
اكتب ونفّذ المثال البرمجي المشروح في قسم «بناء عملية تسجيل حساب جديد» داخل مشروع Laravel 12 المحلي وتحقق من النتيجة.
-
بدّل بين الحالات الثلاث في المحاكي التفاعلي ضمن قسم «التحقق من الدخول عبر Attempt» وقارن مخرجات التنفيذ.
تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.
اختبر فهمك.
ووصلها للإتقان.
كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.
أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.
الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.
لمحة عن التحدي8 أسئلة تنتظرك +
ما الهدف الهندسي الأساسي من بناء عملية تسجيل حساب جديد في إطار العمل Laravel 12؟
يسهم بناء عملية تسجيل حساب جديد في تنظيم منطق التطبيق بأسلوب معياري آمن وقابل للصيانة في Laravel 12.
يساعد الالتزام باصطلاحات Laravel 12 الرسمية في قسم «التحقق من الدخول عبر Attempt» على رفع جودة الكود وسهولة اختباره آلياً.
صواب؛ الالتزام بالمعايير القياسية في Laravel 12 يجعل الكود واضحاً وسهل الفحص والصيانة.
أي آلية في Laravel 12 تتولى إدارة تجديد الجلسة ومنع اختطافها بشكل مباشر ومنظم؟
توفر طبقة إطار العمل وحاوية الخدمات في Laravel 12 الأدوات القياسية لإدارة تجديد الجلسة ومنع اختطافها.
لماذا يُعد تطبيق الوصول لبيانات المستخدم المسجل مهماً عند بناء تطبيقات Laravel 12 جاهزة للإنتاج؟
لأنه يمنع الأخطاء البرمجية الخفية ويوحد سلوك التطبيق بين بيئتي التطوير والإنتاج.
في Laravel 12، يُنصح بكتابة مفاتيح الإنتاج السرية مباشرة داخل ملفات الكود المصدري المرفوعة إلى Git بدلاً من ملفات البيئة.
خطأ؛ يجب حفظ المفاتيح والبيانات السرية في متغيرات البيئة وعدم رفعها أبداً إلى مستودع Git.
ما المزايا الهندسية التي يحققها تطبيق تسجيل الخروج الآمن وإبطال الجلسة في Laravel 12؟ (اختر كل ما ينطبق)
يوفر فصلاً واضحاً للمسؤوليات، وأماناً أعلى أثناء التنفيذ، وتعاوناً أسهل بين أفراد الفريق.
يوظف إطار العمل Laravel 12 ميزات PHP 8 الحديثة مثل تحديد أنواع القيم المرجعة لجعل الكود أكثر وضوحاً وأماناً.
صواب؛ يعتمد Laravel 12 بشكل كامل على الصياغة الحديثة للغة PHP 8.2+ وسلامة الأنواع.
ما الفرق الجوهري بين معيار Laravel 12 الحديث والملفات اليدوية التقليدية في ملخص تدفقات التسجيل والدخول؟
يوفر Laravel 12 واجهات قياسية موحدة وحماية مدمجة تغني عن الكود اليدوي المعرض للأخطاء.