المشكلة
ينسى المستخدمون كلمات مرورهم. تحتاج إلى طريقة آمنة للسماح لهم بإعادة تعيينها دون المساس بأمان الحساب.
الحل: إعادة تعيين كلمة المرور المدمجة في Laravel
الخطوة 1: إعداد البريد
# .env
MAIL_MAILER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=your_username
MAIL_PASSWORD=your_password
MAIL_FROM_ADDRESS=noreply@yourapp.com
MAIL_FROM_NAME="${APP_NAME}"
الخطوة 2: إنشاء مسارات إعادة التعيين
// routes/web.php
Route::get('/forgot-password', [PasswordResetController::class, 'showForm'])
->name('password.request');
Route::post('/forgot-password', [PasswordResetController::class, 'sendLink'])
->middleware('throttle:5,1')
->name('password.email');
Route::get('/reset-password/{token}', [PasswordResetController::class, 'showResetForm'])
->name('password.reset');
Route::post('/reset-password', [PasswordResetController::class, 'reset'])
->name('password.update');
الخطوة 3: إنشاء المتحكّم
<?php
namespace App\Http\Controllers\Auth;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Password;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Str;
class PasswordResetController extends Controller
{
public function sendLink(Request $request)
{
$request->validate(['email' => 'required|email']);
$status = Password::sendResetLink(
$request->only('email')
);
return $status === Password::RESET_LINK_SENT
? back()->with('status', 'Password reset link sent!')
: back()->withErrors(['email' => __($status)]);
}
public function reset(Request $request)
{
$request->validate([
'token' => 'required',
'email' => 'required|email',
'password' => 'required|min:8|confirmed',
]);
$status = Password::reset(
$request->only('email', 'password', 'password_confirmation', 'token'),
function ($user, $password) {
$user->forceFill([
'password' => Hash::make($password)
])->setRememberToken(Str::random(60));
$user->save();
}
);
return $status === Password::PASSWORD_RESET
? redirect()->route('login')->with('status', __($status))
: back()->withErrors(['email' => [__($status)]]);
}
}
الخطوة 4: تخصيص قالب البريد
php artisan vendor:publish --tag=laravel-notifications
أفضل ممارسات الأمان
- حدّد معدّل طلبات إعادة تعيين كلمة المرور
- اضبط انتهاء صلاحية الرمز (افتراضياً: 60 دقيقة)
- سجّل محاولات إعادة التعيين
- أبطِل جميع الجلسات بعد إعادة التعيين
هذا كل شيء! يمكن لمستخدميك الآن إعادة تعيين كلمات مرورهم بأمان.
التعليقات (0)
اترك تعليقًا
لا توجد تعليقات بعد. كن أول من يشارك أفكاره!