From c7f24c2340d05e3d797c2dc8352be9c58b966ff5 Mon Sep 17 00:00:00 2001 From: Nima8FT Date: Wed, 23 Apr 2025 12:59:57 +0330 Subject: [PATCH] implement forgot password system --- .../Controllers/Auth/PasswordController.php | 57 +++++++++++++++++++ .../ForgotPasswordNotificationRequest.php | 28 +++++++++ .../Http/Requests/ResetPasswordRequest.php | 29 ++++++++++ .../views/auth/forgot-password.blade.php | 36 ++++++++++++ .../resources/views/auth/login.blade.php | 2 +- .../views/auth/reset-password.blade.php | 51 +++++++++++++++++ Web-Application/Manually/routes/web.php | 11 ++++ 7 files changed, 213 insertions(+), 1 deletion(-) create mode 100644 Web-Application/Manually/app/Http/Controllers/Auth/PasswordController.php create mode 100644 Web-Application/Manually/app/Http/Requests/ForgotPasswordNotificationRequest.php create mode 100644 Web-Application/Manually/app/Http/Requests/ResetPasswordRequest.php create mode 100644 Web-Application/Manually/resources/views/auth/forgot-password.blade.php create mode 100644 Web-Application/Manually/resources/views/auth/reset-password.blade.php diff --git a/Web-Application/Manually/app/Http/Controllers/Auth/PasswordController.php b/Web-Application/Manually/app/Http/Controllers/Auth/PasswordController.php new file mode 100644 index 0000000..fbc8b15 --- /dev/null +++ b/Web-Application/Manually/app/Http/Controllers/Auth/PasswordController.php @@ -0,0 +1,57 @@ +only('email') + ); + + return $status === Password::ResetLinkSent + ? back()->with(['status' => __($status)]) + : back()->withErrors(['email' => __($status)]); + } + + public function resetPasswordPage(Request $request, $token) + { + $data['email'] = $request->email; + $data['token'] = $token; + return view('auth.reset-password', compact('data')); + } + + public function resetPassword(ResetPasswordRequest $request) + { + $status = Password::reset( + $request->only('email', 'password', 'password_confirmation', 'token'), + function (User $user, string $password) { + $user->forceFill([ + 'password' => Hash::make($password) + ])->setRememberToken(Str::random(60)); + $user->save(); + event(new PasswordReset($user)); + } + ); + + return $status === Password::PasswordReset + ? redirect()->route('login')->with('status', __($status)) + : back()->withErrors(['email' => [__($status)]]); + } +} diff --git a/Web-Application/Manually/app/Http/Requests/ForgotPasswordNotificationRequest.php b/Web-Application/Manually/app/Http/Requests/ForgotPasswordNotificationRequest.php new file mode 100644 index 0000000..cabb8e7 --- /dev/null +++ b/Web-Application/Manually/app/Http/Requests/ForgotPasswordNotificationRequest.php @@ -0,0 +1,28 @@ +|string> + */ + public function rules(): array + { + return [ + 'email' => 'required|email|exists:users' + ]; + } +} diff --git a/Web-Application/Manually/app/Http/Requests/ResetPasswordRequest.php b/Web-Application/Manually/app/Http/Requests/ResetPasswordRequest.php new file mode 100644 index 0000000..75a04f0 --- /dev/null +++ b/Web-Application/Manually/app/Http/Requests/ResetPasswordRequest.php @@ -0,0 +1,29 @@ +|string> + */ + public function rules(): array + { + return [ + 'email' => 'required|email|exists:users,email', + 'password' => 'required|min:8|confirmed', + ]; + } +} diff --git a/Web-Application/Manually/resources/views/auth/forgot-password.blade.php b/Web-Application/Manually/resources/views/auth/forgot-password.blade.php new file mode 100644 index 0000000..5b25b68 --- /dev/null +++ b/Web-Application/Manually/resources/views/auth/forgot-password.blade.php @@ -0,0 +1,36 @@ +@extends('layouts.app') + +@section('content') +
+
+

Reset Password

+ + @if (session('status')) +
+ {{ session('status') }} +
+ @endif + +
+ @csrf + +
+ + + + @error('email') +

{{ $message }}

+ @enderror +
+ +
+ +
+
+
+
+@endsection \ No newline at end of file diff --git a/Web-Application/Manually/resources/views/auth/login.blade.php b/Web-Application/Manually/resources/views/auth/login.blade.php index 0a329e3..2081aed 100644 --- a/Web-Application/Manually/resources/views/auth/login.blade.php +++ b/Web-Application/Manually/resources/views/auth/login.blade.php @@ -30,7 +30,7 @@
- Forgot Password +
+

+ Reset Password +

+ + @if (session()->has('status')) +
+ {{ session('status') }} +
+ @endif + +
+ @csrf + + +
+ + + @error('email') {{ $message }} @enderror +
+ + {{-- Password --}} +
+ + + @error('password') {{ $message }} @enderror +
+ + {{-- Password Confirmation --}} +
+ + +
+ + +
+
+
+@endsection \ No newline at end of file diff --git a/Web-Application/Manually/routes/web.php b/Web-Application/Manually/routes/web.php index fc905a2..b945f03 100644 --- a/Web-Application/Manually/routes/web.php +++ b/Web-Application/Manually/routes/web.php @@ -3,6 +3,7 @@ use App\Http\Controllers\Auth\LoginController; use App\Http\Controllers\Auth\LogoutController; use App\Http\Controllers\Auth\MailController; +use App\Http\Controllers\Auth\PasswordController; use App\Http\Controllers\Auth\RegisterController; use App\Http\Controllers\DashboardController; use Illuminate\Support\Facades\Route; @@ -27,3 +28,13 @@ Route::group(['middleware' => 'auth'], function () { Route::post('email/verification-notification', [MailController::class, 'notification'])->name('verification.send'); Route::get('email/verify/{id}/{hash}', [MailController::class, 'verify'])->name('verification.verify'); }); + + +Route::group(['middleware' => 'guest'], function () { + //forgot password + // Route::get('forgot-password', [PasswordController::class, 'forgotPasswordPage'])->name('password.request'); + Route::get('forgot-password-page', [PasswordController::class, 'forgotPasswordPage'])->name('password.request'); + Route::post('forgot-password', [PasswordController::class, 'forgotPasswordNotification'])->name('password.email'); + Route::get('reset-password/{token}', [PasswordController::class, 'resetPasswordPage'])->name('password.reset'); + Route::post('reset-password', [PasswordController::class, 'resetPassword'])->name('password.update'); +});