From 78923e727610bbf95a0b447c87c19de161818584 Mon Sep 17 00:00:00 2001
From: arieeefajar
Date: Thu, 23 Jan 2025 21:50:02 +0700
Subject: [PATCH] feat(auth): func forgot password
---
.../Auth/PasswordResetLinkController.php | 65 +++++---
app/Mail/ResetPasswordMail.php | 9 +-
database/seeders/UsersSeeder.php | 2 +-
.../views/auth/confirm-password.blade.php | 27 ---
.../views/auth/forgot-password.blade.php | 2 +-
resources/views/auth/login.blade.php | 1 +
.../views/auth/reset-password-form.blade.php | 155 ++++++++++++++++++
routes/web.php | 4 +-
8 files changed, 209 insertions(+), 56 deletions(-)
delete mode 100644 resources/views/auth/confirm-password.blade.php
create mode 100644 resources/views/auth/reset-password-form.blade.php
diff --git a/app/Http/Controllers/Auth/PasswordResetLinkController.php b/app/Http/Controllers/Auth/PasswordResetLinkController.php
index e536ccb..75aa024 100644
--- a/app/Http/Controllers/Auth/PasswordResetLinkController.php
+++ b/app/Http/Controllers/Auth/PasswordResetLinkController.php
@@ -3,12 +3,12 @@
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
-use App\Models\PasswordResetToken;
-use Illuminate\Http\RedirectResponse;
+use App\Mail\ResetPasswordMail;
+use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash;
-use Illuminate\Support\Facades\Password;
+use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Facades\Validator;
use Illuminate\View\View;
@@ -45,30 +45,49 @@ public function store(Request $request)
return redirect()->back()->withInput();
}
- DB::table('password_reset_tokens')->updateOrInsert(['email' => $request->email], [
- 'token' => Hash::make($request->_token),
- 'created_at' => now(),
- ]);
+ DB::table('password_reset_tokens')->updateOrInsert(
+ ['email' => $request->email],
+ [
+ 'token' => Hash::make($request->_token),
+ 'created_at' => now(),
+ ]
+ );
+
+ $resetLink = route('auth.create_new_password_form', ['token' => $request->_token, 'email' => $request->email]);
+ Mail::to($request->email)->send(new ResetPasswordMail($resetLink));
+
alert()->success('Berhasil', 'Silahkan cek email anda untuk mereset password');
return redirect()->back();
}
- // public function store(Request $request): RedirectResponse
- // {
- // $request->validate([
- // 'email' => ['required', 'email'],
- // ]);
- // // We will send the password reset link to this user. Once we have attempted
- // // to send the link, we will examine the response then see the message we
- // // need to show to the user. Finally, we'll send out a proper response.
- // $status = Password::sendResetLink(
- // $request->only('email')
- // );
+ public function createNewPasswordForm(Request $request)
+ {
+ return view('auth.reset-password-form', ['token' => $request->token, 'email' => $request->email]);
+ }
- // return $status == Password::RESET_LINK_SENT
- // ? back()->with('status', __($status))
- // : back()->withInput($request->only('email'))
- // ->withErrors(['email' => __($status)]);
- // }
+ public function storeNewPasswordForm(Request $request)
+ {
+ $data = DB::table('password_reset_tokens')->where('email', $request->email)->first();
+
+ if ($data == null || !Hash::check($request->token, $data->token)) {
+ toast('Link reset password tidak valid atau kedaluwarsa', 'error')->position('top')->autoclose(3000);
+ return redirect()->back();
+ }
+
+ DB::beginTransaction();
+ $user = User::where('email', $request->email)->first();
+ $user->password = Hash::make($request->new_password);
+ try {
+ $user->save();
+ DB::table('password_reset_tokens')->where('email', $request->email)->delete();
+ DB::commit();
+ alert()->success('Berhasil', 'Password berhasil direset, silahkan login');
+ return redirect()->route('auth.login');
+ } catch (\Throwable $th) {
+ DB::rollBack();
+ toast('Terjadi kesalahan', 'error')->position('top')->autoclose(3000);
+ return redirect()->back();
+ }
+ }
}
diff --git a/app/Mail/ResetPasswordMail.php b/app/Mail/ResetPasswordMail.php
index 973835c..337af3c 100644
--- a/app/Mail/ResetPasswordMail.php
+++ b/app/Mail/ResetPasswordMail.php
@@ -13,12 +13,14 @@ class ResetPasswordMail extends Mailable
{
use Queueable, SerializesModels;
+ public $resetLink;
+
/**
* Create a new message instance.
*/
- public function __construct()
+ public function __construct($resetLink)
{
- //
+ $this->resetLink = $resetLink;
}
/**
@@ -38,6 +40,9 @@ public function content(): Content
{
return new Content(
view: 'auth.mail-reset-password',
+ with: [
+ 'resetLink' => $this->resetLink
+ ]
);
}
diff --git a/database/seeders/UsersSeeder.php b/database/seeders/UsersSeeder.php
index 93f12dc..e63d054 100644
--- a/database/seeders/UsersSeeder.php
+++ b/database/seeders/UsersSeeder.php
@@ -18,7 +18,7 @@ public function run(): void
User::create([
'username' => 'admin',
'name' => 'Admin Sage',
- 'email' => 'adminSage@gmail.com',
+ 'email' => 'ariefajar739@gmail.com',
'password' => Hash::make('admin123'),
'role' => 'admin'
]),
diff --git a/resources/views/auth/confirm-password.blade.php b/resources/views/auth/confirm-password.blade.php
deleted file mode 100644
index 3cbbe08..0000000
--- a/resources/views/auth/confirm-password.blade.php
+++ /dev/null
@@ -1,27 +0,0 @@
-
-
- {{ __('This is a secure area of the application. Please confirm your password before continuing.') }}
-
-
-
-
diff --git a/resources/views/auth/forgot-password.blade.php b/resources/views/auth/forgot-password.blade.php
index 595fdfe..534653c 100644
--- a/resources/views/auth/forgot-password.blade.php
+++ b/resources/views/auth/forgot-password.blade.php
@@ -4,7 +4,7 @@
- Reset Password | CornQuest
+ Lupa Password | CornQuest
diff --git a/resources/views/auth/login.blade.php b/resources/views/auth/login.blade.php
index 6c318db..8295bb0 100644
--- a/resources/views/auth/login.blade.php
+++ b/resources/views/auth/login.blade.php
@@ -123,6 +123,7 @@ class="fw-semibold text-primary text-decoration-underline"> Signup
+ @include('sweetalert::alert')