From 09b1c12b21a737e5d2f7c99e2e66d3aaef6f1686 Mon Sep 17 00:00:00 2001 From: ISMAIL MASSERAN Date: Tue, 6 Oct 2026 11:28:47 +0800 Subject: [PATCH] DONE: reset password function, update header and footer design by adding logo --- .../Controllers/AuthMobile/AuthController.php | 57 ++++++++++- app/Http/Controllers/HomeController.php | 5 +- app/Http/Controllers/UserController.php | 4 +- app/Mail/ResetPassword.php | 25 ++--- resources/views/auth/login.blade.php | 4 +- .../views/template/partials/footer.blade.php | 30 +++++- .../views/template/partials/header.blade.php | 34 +++++-- .../views/template/reset-password.blade.php | 98 ++++--------------- routes/api.php | 2 + 9 files changed, 147 insertions(+), 112 deletions(-) diff --git a/app/Http/Controllers/AuthMobile/AuthController.php b/app/Http/Controllers/AuthMobile/AuthController.php index 1e44bd52..84b3f867 100644 --- a/app/Http/Controllers/AuthMobile/AuthController.php +++ b/app/Http/Controllers/AuthMobile/AuthController.php @@ -217,7 +217,9 @@ class AuthController extends Controller $user['is_verified'] = 0; $user->save(); - Mail::to($request->email)->send(new ResetPassword($user->name, $token)); + $resetUrl = rtrim(config('app.app_pembida'), '/') . '/reset-password/' . $token; + + Mail::to($request->email)->send(new ResetPassword($user->name, $resetUrl)); if (Mail::failures() != 0) { return response()->json([ @@ -232,6 +234,59 @@ class AuthController extends Controller ]); } + public function validateResetToken($token) + { + $user = User::where('token', $token)->where('is_verified', 0)->first(); + + if (!$user) { + return response()->json([ + 'success' => false, + 'message' => 'Pautan tetapan semula kata laluan tidak sah atau telah tamat tempoh.', + ], 422); + } + + return response()->json([ + 'success' => true, + 'email' => $user->email, + ]); + } + + public function updatePassword(Request $request) + { + $validator = Validator::make($request->all(), [ + 'token' => 'required|string', + 'password' => 'required|string|min:6', + 'confirm_password' => 'required|same:password', + ]); + + if ($validator->fails()) { + return response()->json([ + 'success' => false, + 'message' => $validator->errors()->first(), + 'errors' => $validator->errors(), + ], 422); + } + + $user = User::where('token', $request->token)->where('is_verified', 0)->first(); + + if (!$user) { + return response()->json([ + 'success' => false, + 'message' => 'Pautan tetapan semula kata laluan tidak sah atau telah tamat tempoh.', + ], 422); + } + + $user->password = Hash::make($request->password); + $user->token = null; + $user->is_verified = 0; + $user->save(); + + return response()->json([ + 'success' => true, + 'message' => 'Katalaluan anda telah berjaya dikemaskini.', + ]); + } + public function getProfile() { $user = Auth::user(); diff --git a/app/Http/Controllers/HomeController.php b/app/Http/Controllers/HomeController.php index b300775e..539239be 100644 --- a/app/Http/Controllers/HomeController.php +++ b/app/Http/Controllers/HomeController.php @@ -734,7 +734,10 @@ class HomeController extends Controller return view('homecawangan', compact('all_lelong', 'arrayinfomutu')); } else { Auth::logout(); - return redirect()->route('login'); + return redirect()->route('login')->with( + 'failed', + 'Akaun ini tiada peranan (role) yang sah. Sila hubungi admin untuk tetapkan role.' + ); } } diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php index 72454342..0bb03262 100644 --- a/app/Http/Controllers/UserController.php +++ b/app/Http/Controllers/UserController.php @@ -113,7 +113,9 @@ class UserController extends Controller $user['is_verified'] = 0; $user->save(); - Mail::to($request->email)->send(new ResetPassword($user->name, $token)); + $resetUrl = url('/forgot-password/' . $token); + + Mail::to($request->email)->send(new ResetPassword($user->name, $resetUrl)); if(Mail::failures() != 0) { return back()->with('success', 'Berjaya DiHantar! Pautan Lupa Katalaluan Telah Dihantarkan Kepada Alamat Emel Anda.'); diff --git a/app/Mail/ResetPassword.php b/app/Mail/ResetPassword.php index 4932239a..a41daee9 100644 --- a/app/Mail/ResetPassword.php +++ b/app/Mail/ResetPassword.php @@ -11,33 +11,22 @@ class ResetPassword extends Mailable { use Queueable, SerializesModels; - /** - * Create a new message instance. - * - * @return void - */ - public $name; - public $token; + public $resetUrl; - public function __construct($name, $token) + public function __construct($name, $resetUrl) { $this->name = $name; - $this->token = $token; + $this->resetUrl = $resetUrl; } - /** - * Build the message. - *git stsa - */ public function build() { - // return $this->view('view.name'); $user['name'] = $this->name; - $user['token'] = $this->token; + $user['reset_url'] = $this->resetUrl; - return $this->from("masterlelongpkb@gmail.com", "Admin ArrahnBid") - ->subject('ArrahnBid -Tukar Katalaluan') - ->view('template.reset-password', ['user' => $user]); + return $this->from(config('mail.from.address'), config('mail.from.name')) + ->subject('ArrahnBid - Tukar Katalaluan') + ->view('template.reset-password', ['user' => $user]); } } diff --git a/resources/views/auth/login.blade.php b/resources/views/auth/login.blade.php index 5b1604d5..17f290ac 100644 --- a/resources/views/auth/login.blade.php +++ b/resources/views/auth/login.blade.php @@ -27,8 +27,8 @@ @if (session('success'))
{{ session('success') }}
@endif - @if (session('failed')) - + @if (session('failed') || session('error')) + @endif
@csrf diff --git a/resources/views/template/partials/footer.blade.php b/resources/views/template/partials/footer.blade.php index 4ca93315..863fccc1 100644 --- a/resources/views/template/partials/footer.blade.php +++ b/resources/views/template/partials/footer.blade.php @@ -1,7 +1,7 @@ -

+

Terima Kasih,

-

+

ArrahnBid

@@ -9,6 +9,32 @@ + + + + + + + + + + + + +
+ ArrahnBid +
+ ArrahnBid +
+ Emel ini dijana secara automatik. Sila jangan balas emel ini. +
+ + diff --git a/resources/views/template/partials/header.blade.php b/resources/views/template/partials/header.blade.php index 90430c17..d596d656 100644 --- a/resources/views/template/partials/header.blade.php +++ b/resources/views/template/partials/header.blade.php @@ -32,21 +32,37 @@ } - + + style="width:100%;border-collapse:collapse;border:0;border-spacing:0;background:#f4f6f8;"> -
+ - - + -
- ArrahnBid + style="width:600px;max-width:100%;border-collapse:collapse;border:1px solid #e5e7eb;border-spacing:0;text-align:left;background:#ffffff;"> +
+ + + + + +
+ ArrahnBid + + + ArrahnBid + +
+ -
+ diff --git a/resources/views/template/reset-password.blade.php b/resources/views/template/reset-password.blade.php index fdec30be..f9dbd0a1 100644 --- a/resources/views/template/reset-password.blade.php +++ b/resources/views/template/reset-password.blade.php @@ -1,82 +1,24 @@ - - +@include('template.partials.header') - - - - - - - - - - - - -
- - - - - - - -
- ArrahnBid -
- - - - -
-

- Hello {{ $user ? $user['name'] : '' }}, -

- Kami telah menerima permintaan untuk menetapkan semula kata laluan. -

-

- Anda boleh menetapkan semula kata laluan anda dengan mengklik butang di bawah: -

+

+ Hello {{ $user ? $user['name'] : '' }}, +

+

+ Kami telah menerima permintaan untuk menetapkan semula kata laluan. +

+

+ Anda boleh menetapkan semula kata laluan anda dengan mengklik butang di bawah: +

-

- Tukar Katalaluan Anda -

+

+ Tukar Katalaluan Anda +

+

+ Jika butang tidak berfungsi, salin dan tampal pautan ini ke pelayar anda: +

+

+ {{ $user['reset_url'] }} +

-

- Terima Kasih,

-

- ArrahnBid

-
-
-
- - \ No newline at end of file +@include('template.partials.footer') diff --git a/routes/api.php b/routes/api.php index bdb1bff4..b047f631 100644 --- a/routes/api.php +++ b/routes/api.php @@ -26,6 +26,8 @@ Route::post('/register', [AuthController::class, 'register']); Route::get('/verifyEmail', [AuthController::class, 'verifyEmail']); Route::post('/user/login', [AuthController::class, 'loginUser']); Route::post('/forgotPassword', [AuthController::class, 'forgotPassword']); +Route::get('/resetPassword/{token}', [AuthController::class, 'validateResetToken']); +Route::post('/resetPassword', [AuthController::class, 'updatePassword']); Route::post('/password/email', [ForgotPasswordController::class, 'sendResetLinkEmail']);