إعادة تعيين كلمات المرور (Password Reset) في Laravel

من موسوعة حسوب
< Laravel
مراجعة 14:00، 24 أكتوبر 2018 بواسطة رؤيا-بنعطية (نقاش | مساهمات)
(فرق) → مراجعة أقدم | المراجعة الحالية (فرق) | مراجعة أحدث ← (فرق)
اذهب إلى التنقل اذهب إلى البحث

مقدمة

تريد أن تبدأ بسرعة؟ فقط نفذ الأمر php artisan make:auth في تطبيق Laravel جديد وانتقل بالمتصفح إلى الرابط http://your-app.test/register أو أي رابط URL آخر عيّن لتطبيقك. سيهتم هذا الأمر بنظام الاستيثاق بأكمله، بما في ذلك إعادة تعيين كلمات المرور!

توفر معظم تطبيقات الويب للمستخدمين طريقة لإعادة تعيين كلمات المرور المنسية. بدلًا من إجبارك على إعادة برمجة ذلك في كل تطبيق، يوفر Laravel طرقًا ملائمة لإرسال رسائل تذكير بكلمات المرور وإجراء عمليات إعادة تعيين كلمة المرور.

قبل استخدام ميزات إعادة تعيين كلمة المرور في Laravel، يجب على المستخدم استخدام السمة Illuminate\Notifications\Notifiable.

اعتبارات قاعدة البيانات

للبدء، تحقق من أن النموذج App\User الخاص بك ينفذ االسمة Illuminate\Contracts\Auth\CanResetPassword. بالطبع، فإن نموذج App\User المتضمن مع إطار العمل، ينفذ هذه الواجهة مسبقًا، ويستخدم عقد Illuminate\Auth\Passwords\CanResetPassword لتضمين الدوال اللازمة لتطبيق الواجهة.

توليد رمز إعادة تعيين جدول التهجير

بعد ذلك، يجب إنشاء جدول لتخزين الرموز المميزة لإعادة تعيين كلمة المرور. يضمن التهجير لهذا الجدول مع Laravel افتراضيًا دون حاجة إلى تثبيت أي شيء، وتوجد في ملف database\migrations. لذا، كل ما عليك فعله هو تشغيل أمر تهجير قاعدة البيانات :

php artisan migrate

تعيين المسار

يتضمن Laravel وحدتا التحكم Auth\ForgotPasswordController و Auth\ResetPasswordController اللتان تحتويان على المنطق الضروري لإرسال روابط إعادة تعيين كلمة المرور ولإعادة تعيينها من قبل المستخدم. كل المسارات التي تحتاج إليها لإعادة تعيين كلمات المرور يمكن إنشاؤها عن طريق الأمر:

php artisan make:auth

الواجهات

مرة أخرى، ينشئ  Laravel كل الواجهات الضرورية لإعادة تعيين كلمة المرور عند تنفيذ الأمر make:auth. توضع هذه الواجهات في resources/views/auth/passwords. أنت حر في تخصيصها حسب حاجة تطبيقك.

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

بمجرد تحديد المسارات والواجهات لإعادة تعيين كلمات مرور المستخدم عبر المتصفح، يمكنك الوصول إلى المسار password/reset.

تمتلك وحدة التحكم ForgotPasswordController المتضمنة مع إطار العمل، المنطق لإرسال رابط إعادة تعيين كلمة المرور عبر البريد الإلكتروني، في حين تتضمن وحدة التحكم ResetPasswordController المنطق لإعادة تعيين كلمات مرور المستخدم.

بعد إعادة تعيين كلمة المرور، سيسجل دخول المستخدم تلقائيًا إلى التطبيق ويعاد توجيهه إلى ‎/home. يمكنك تخصيص موقع ما بعد إعادة تعيين كلمة المرور من خلال تحديد خاصية redirectTo في وحدة التحكم ResetPasswordController :

Protected $redirectTo = /dashboard’;

تنتهي صلاحية رموز إعادة تعيين كلمة المرور تلقائيًا بعد ساعة. يمكنك التحكم في مدتها عن طريق خاصية انتهاء صلاحية إعادة تعيين كلمة المرور في الملف config/auth.php.

التخصيص

تخصيص حارس الاستيثاق

في ملف الإعدادات auth.php، يمكنك إعداد العديد من "الحراس"، والذي يمكن استخدامهم لتحديد سلوك الاستيثاق للعديد من جداول المستخدم. يمكنك تخصيص وحدة التحكم ResetPasswordController المتضمنة، لاستخدام حارس من اختيارك عن طريق إعادة تعيين تابع الحارس في وحدة التحكم. يعيد هذا التابع امتدادًا لحارس:

use Illuminate\Support\Facades\Auth;

protected function guard()

{
   return Auth::guard('guard-name');
}

تخصيص وسيط كلمة المرور

في ملف الإعدادات auth.php، يمكنك إعداد العديد من "وسائط" كلمة المرور، والتي يمكن أن تستخدم لإعادة تعيين كلمات المرور للعديد من جداول المستخدم. يمكنك تخصيص وحدتا التحكم ForgotPasswordController و ResetPasswordController لاستخدام وسيط من اختيارك عن طريق إعادة تعيين تابع الوسيط:

use Illuminate\Support\Facades\Password;

/**
* يرجع الوسيط المستخدم في عملية إعادة تعيين كلمة المرور.
* @يعيد PasswordBroker
*/

protected function broker()

{
   return Password::broker('name');
}

تخصيص إعادة تعيين البريد الإلكتروني

يمكنك بسهولة تعديل صنف الإشعارات المستخدَم لإرسال رابط إعادة تعيين كلمة المرور إلى المستخدِم. بداية، أعد تعيين التابع sendPasswordResetNotification في نموذج المستخدم. ضمن هذا التابع، يمكنك إرسال الإشعار باستخدام أي صنف من الإشعارات تختاره. رمز إعادة تعيين كلمة المرور ‎$token هو أول معامل للتابع:

/**

* إرسال إشعار بإعادة تعيين كلمة المرور.
‎* @المدخلات$token سلسلة حرفية
* @يعيد فراغ

*/

public function sendPasswordResetNotification($token)

{
   $this->notify(new ResetPasswordNotification($token));
}

مصادر