في هذا الدرس 6تصفّح المواضيع
يعتمد نظام المصادقة في Laravel داخل ملف config/auth.php على مكونين منفصلين متكاملين هما حراس المصادقة Guards ومزودو المستخدمين Providers. يحدد الحارس طريقة تتبع هوية المستخدم في كل طلب مثل جلسات الويب، بينما يحدد المزود آلية استرجاع سجل المستخدم من قاعدة البيانات عبر Eloquent.
- حارس الجلسة (Session Guard): يحفظ حالة تسجيل دخول المستخدم عبر الطلبات المتتالية باستخدام ملفات تعريف الارتباط والجلسة.
- مزود النماذج (Eloquent Provider): يستعلم عن حسابات المستخدمين عبر نموذج User المطبق لواجهة Authenticatable.
- الفصل المعماري (Decoupled Design): يتيح تعدد حراس الويب والواجهات البرمجية دون تغيير منطق التطبيق.
// Inside config/auth.php
'defaults' => [
'guard' => env('AUTH_GUARD', 'web'),
],
'guards' => [
'web' => ['driver' => 'session', 'provider' => 'users'],
],
يُمنع تخزين كلمات المرور كنص صريح أو بتشفير قابل للعكس؛ وبدلاً من ذلك يوفر Laravel واجهة Hash لتوليد تجزئة أحادية الاتجاه بخوارزمية Bcrypt أو Argon2. تولد دالة Hash::make بصمة مملحة عشوائياً، بينما تتحقق دالة Hash::check بأمان من تطابق كلمة المرور المدخلة مع البصمة المخزنة.
- توليد البصمة (Hash::make): تنتج تجزئة مملحة فريدة في كل مرة حتى لو تشابهت كلمتا مرور لمستخدمين مختلفين.
- فحص التطابق (Hash::check): تقارن النص المدخل بالبصمة المخزنة بزمن ثابت يحمي من هجمات قياس التوقيت.
- فحص الترقية (needsRehash): تكشف ما إذا كانت البصمة القديمة تحتاج إعادة تجزئة بعد زيادة جولات التكلفة.
use Illuminate\Support\Facades\Hash;
$hashed = Hash::make($request->input('password'));
if (Hash::check($plainInput, $user->password)) {
// Password verified!
}
يتضمن نموذج User الحديث في Laravel 12 محول النوع 'password' => 'hashed' مدمجاً داخل دالة casts بشكل افتراضي. يقوم هذا المحول الذكي بتجزئة أي نص عادي يُسند إلى حقل كلمة المرور تلقائياً، كما يتجنب إعادة تجزئة القيمة إذا كانت مجزأة مسبقاً بالفعل.
- تجزئة تلقائية عند الإسناد (Auto Hashing): بمجرد إسناد نص عادي لحقل password يتكفل النموذج بتجزئته قبل الحفظ.
- منع التجزئة المزدوجة (Double-Hash Guard): يفحص بادئة النص ليتأكد من عدم تجزئة قيمة مجزأة مسبقاً عبر Hash::make.
- الإخفاء عند التحويل ($hidden Array): يوضع حقل password دائماً في مصفوفة $hidden لمنع ظهوره في استجابات JSON.
protected $hidden = ['password', 'remember_token'];
protected function casts(): array
{
return [
'password' => 'hashed',
];
}
عندما يحتاج تطبيقك لتخزين بيانات سرية يجب استرجاع نصها الأصلي لاحقاً مثل مفاتيح الربط الخارجية، استخدم واجهة التشفير المتماثل Crypt. يشفر Laravel البيانات بخوارزمية AES-256-CBC مع توقيع رقمي مشتق من مفتاح التطبيق APP_KEY بحيث يؤدي أي تلاعب بالنص المشفر إلى إطلاق استثناء DecryptException.
- تشفير النصوص (encryptString): تشفر النص وتوقعه رقمياً باستخدام مفتاح التطبيق السري APP_KEY.
- فك التشفير الآمن (decryptString): تتحقق أولاً من سلامة التوقيع الرقمي ثم تسترجع النص الأصلي بدقة.
- معالجة الاستثناء (DecryptException): التقط استثناء فك التشفير للتعامل الآمن مع أي بيانات تالفة أو معدلة.
use Illuminate\Contracts\Encryption\DecryptException;
use Illuminate\Support\Facades\Crypt;
$cipher = Crypt::encryptString($apiToken);
$plain = Crypt::decryptString($cipher);
بدلاً من استدعاء واجهة Crypt يدوياً عند كل قراءة أو كتابة لحقل حساس، يوفر Eloquent محولات تشفير مدمجة مثل encrypted و encrypted:array. يقوم النموذج بتشفير القيمة تلقائياً قبل حفظها في قاعدة البيانات ويفك تشفيرها فور قراءتها داخل كود PHP.
- محول النصوص المشفرة (encrypted): يشفر الحقول النصية الحساسة تلقائياً عند التخزين ويفكها عند القراءة.
- محول المصفوفات المشفرة (encrypted:array): يحول المصفوفة إلى JSON مشفر في القاعدة ويعيدها كمصفوفة PHP جاهزة.
- حجم عمود القاعدة (TEXT Column): استخدم نوع TEXT للأعمدة المشفرة لأن النص المشفر أطول بكثير من النص الأصلي.
protected function casts(): array
{
return [
'api_secret' => 'encrypted',
'recovery_codes' => 'encrypted:array',
];
}
يُعد الاختيار الصحيح بين التجزئة أحادية الاتجاه والتشفير ثنائي الاتجاه قراراً أمنياً جوهرياً في كل تطبيق Laravel. استخدم التجزئة حصرياً لكلمات المرور التي لا يجب قراءتها أبداً، واستخدم التشفير للمفاتيح والبيانات الحساسة التي يحتاج النظام لفك تشفيرها واستخدامها لاحقاً.
| وجه المقارنة الهندسي | الأسلوب اليدوي أو غير المحسن | معيار Laravel 12 الحديث |
|---|---|---|
| تخزين كلمات المرور | استخدام دوال md5 أو sha1 السريعة وغير الآمنة | استخدام المحول hashed المعتمد على خوارزمية Bcrypt القوية |
| فحص كلمة المرور | مقارنة النصوص بالمعامل العادي المعرض لهجمات التوقيت | استخدام دالة Hash::check ذات الزمن الثابت والآمن |
| حفظ مفاتيح الربط | تخزين مفاتيح الخدمات الخارجية كنص مكشوف في القاعدة | تشفيرها تلقائياً عبر المحول encrypted أو واجهة Crypt |
| حماية استجابات JSON | تسرب بصمة كلمة المرور بالخطأ عند إرجاع كائن المستخدم | إدراج الحقول الحساسة داخل مصفوفة $hidden في النموذج |
$user = User::create([
'name' => 'Sara',
'password' => $request->input('password'), // Auto-hashed
'api_secret' => $token, // Auto-encrypt
]);
ملخص الدرس
حصاد الدرسمراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي
ماذا تعلّمت في هذا الدرس؟
أتقنت في هذا الدرس حول «تجزئة كلمات المرور والتشفير وحراس المصادقة في Laravel» مفاهيم حراس المصادقة ومزودو المستخدمين، وتجزئة كلمات المرور عبر Hash، والتجزئة التلقائية عبر محول Hashed وفق معايير Laravel 12 الحديثة.
الخطوة التالية والدرس القادم
انتقل الآن إلى الدرس التالي «بناء تدفقات التسجيل والدخول والخروج وتجديد الجلسة في Laravel» للبناء التراكمي على ما تعلمته.
سجّل الدخول لحفظ تقدمك
تابع إنجاز المواضيع والمصطلحات والمهام، وكمّل من آخر خطوة على أي جهاز.
المصطلحات4
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 01 Password Hashing حراس المصادقة
- فهم معمارية الحراس ومزودي المصادقة وتأمين كلمات المرور بالتجزئة عبر Hash::make وتشفير البيانات الحساسة بـ Crypt.
- للمراجعة
- 02 Authentication Guards and Providers حراس المصادقة ومزودو المستخدمين
- المفهوم الهندسي والتطبيق العملي المباشر لقسم حراس المصادقة ومزودو المستخدمين في إطار العمل Laravel 12.
- للمراجعة
- 03 Hashing Passwords With Hash Facade تجزئة كلمات المرور عبر Hash
- المفهوم الهندسي والتطبيق العملي المباشر لقسم تجزئة كلمات المرور عبر Hash في إطار العمل Laravel 12.
- للمراجعة
- 04 Automatic Hashed Model Attribute التجزئة التلقائية عبر محول Hashed
- المفهوم الهندسي والتطبيق العملي المباشر لقسم التجزئة التلقائية عبر محول Hashed في إطار العمل 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 المحلي وتحقق من النتيجة.
-
بدّل بين الحالات الثلاث في المحاكي التفاعلي ضمن قسم «تجزئة كلمات المرور عبر Hash» وقارن مخرجات التنفيذ.
تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.
اختبر فهمك.
ووصلها للإتقان.
كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.
أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.
الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.
لمحة عن التحدي8 أسئلة تنتظرك +
ما الهدف الهندسي الأساسي من حراس المصادقة ومزودو المستخدمين في إطار العمل Laravel 12؟
يسهم حراس المصادقة ومزودو المستخدمين في تنظيم منطق التطبيق بأسلوب معياري آمن وقابل للصيانة في Laravel 12.
يساعد الالتزام باصطلاحات Laravel 12 الرسمية في قسم «تجزئة كلمات المرور عبر Hash» على رفع جودة الكود وسهولة اختباره آلياً.
صواب؛ الالتزام بالمعايير القياسية في Laravel 12 يجعل الكود واضحاً وسهل الفحص والصيانة.
أي آلية في Laravel 12 تتولى إدارة التجزئة التلقائية عبر محول Hashed بشكل مباشر ومنظم؟
توفر طبقة إطار العمل وحاوية الخدمات في Laravel 12 الأدوات القياسية لإدارة التجزئة التلقائية عبر محول Hashed.
لماذا يُعد تطبيق التشفير المتماثل عبر واجهة Crypt مهماً عند بناء تطبيقات Laravel 12 جاهزة للإنتاج؟
لأنه يمنع الأخطاء البرمجية الخفية ويوحد سلوك التطبيق بين بيئتي التطوير والإنتاج.
في Laravel 12، يُنصح بكتابة مفاتيح الإنتاج السرية مباشرة داخل ملفات الكود المصدري المرفوعة إلى Git بدلاً من ملفات البيئة.
خطأ؛ يجب حفظ المفاتيح والبيانات السرية في متغيرات البيئة وعدم رفعها أبداً إلى مستودع Git.
ما المزايا الهندسية التي يحققها تطبيق تشفير حقول النماذج تلقائيا في Laravel 12؟ (اختر كل ما ينطبق)
يوفر فصلاً واضحاً للمسؤوليات، وأماناً أعلى أثناء التنفيذ، وتعاوناً أسهل بين أفراد الفريق.
يوظف إطار العمل Laravel 12 ميزات PHP 8 الحديثة مثل تحديد أنواع القيم المرجعة لجعل الكود أكثر وضوحاً وأماناً.
صواب؛ يعتمد Laravel 12 بشكل كامل على الصياغة الحديثة للغة PHP 8.2+ وسلامة الأنواع.
ما الفرق الجوهري بين معيار Laravel 12 الحديث والملفات اليدوية التقليدية في ملخص التجزئة والتشفير والحراس؟
يوفر Laravel 12 واجهات قياسية موحدة وحماية مدمجة تغني عن الكود اليدوي المعرض للأخطاء.