From 8c93e78955448f7542d396befa17e20b0f64a6c8 Mon Sep 17 00:00:00 2001 From: kusowl Date: Fri, 9 Jan 2026 15:17:28 +0530 Subject: [PATCH] feat(Authentication): User log in, role based dashboard, and logout - add login functionality - alerts for registration and user account status - fix status of broker role is not pending during registration --- .../AuthenticatedUserController.php | 54 +++++++++++++++++++ .../Controllers/RegisteredUserController.php | 8 ++- app/Http/Requests/AuthenticateUserRequest.php | 31 +++++++++++ resources/views/auth/login.blade.php | 21 ++++++-- resources/views/auth/register.blade.php | 2 +- resources/views/components/navbar.blade.php | 17 ++++-- .../views/components/ui/alert-error.blade.php | 3 ++ .../components/ui/alert-success.blade.php | 3 ++ resources/views/components/ui/input.blade.php | 2 +- resources/views/dashboards/admin.blade.php | 3 ++ resources/views/dashboards/broker.blade.php | 3 ++ resources/views/dashboards/user.blade.php | 3 ++ routes/web.php | 13 ++++- 13 files changed, 150 insertions(+), 13 deletions(-) create mode 100644 app/Http/Controllers/AuthenticatedUserController.php create mode 100644 app/Http/Requests/AuthenticateUserRequest.php create mode 100644 resources/views/components/ui/alert-error.blade.php create mode 100644 resources/views/components/ui/alert-success.blade.php create mode 100644 resources/views/dashboards/admin.blade.php create mode 100644 resources/views/dashboards/broker.blade.php create mode 100644 resources/views/dashboards/user.blade.php diff --git a/app/Http/Controllers/AuthenticatedUserController.php b/app/Http/Controllers/AuthenticatedUserController.php new file mode 100644 index 0000000..8a6a618 --- /dev/null +++ b/app/Http/Controllers/AuthenticatedUserController.php @@ -0,0 +1,54 @@ +validated(); + if (Auth::attempt($data, $data['remember_me'] ?? false)) { + $user = Auth::user(); + + if ($user->status !== UserStatus::Active->value) { + Auth::logout(); + return back()->with('error', 'Your account is not active.'); + } + + $request->session()->regenerate(); + + $route = match ($user->role){ + UserTypes::Admin->value => 'admin.dashboard', + UserTypes::Broker->value => 'broker.dashboard', + UserTypes::User->value=> 'user.dashboard', + }; + + return to_route($route); + } + else + { + return back() + ->withInput() + ->with('error', 'Invalid Credentials'); + } + } + + public function destroy(Request $request) + { + Auth::logout(); + $request->session()->invalidate(); + $request->session()->regenerateToken(); + return to_route('home'); + } +} diff --git a/app/Http/Controllers/RegisteredUserController.php b/app/Http/Controllers/RegisteredUserController.php index 94b6cd7..8ac22c7 100644 --- a/app/Http/Controllers/RegisteredUserController.php +++ b/app/Http/Controllers/RegisteredUserController.php @@ -17,14 +17,18 @@ public function create() public function store(StoreRegisterdUser $request){ $data = $request->validated(); + $status = UserStatus::Active->value; - if ($request->role === UserTypes::Broker){ + + if ($data['role'] === UserTypes::Broker->value){ $status = UserStatus::Pending->value; } + $data['status'] = $status; User::create($data); - return to_route('login')->with('success', 'User registered successfully.'); + return to_route('login.create') + ->with('userRegistered', 'User registered successfully.'); } } diff --git a/app/Http/Requests/AuthenticateUserRequest.php b/app/Http/Requests/AuthenticateUserRequest.php new file mode 100644 index 0000000..d96a670 --- /dev/null +++ b/app/Http/Requests/AuthenticateUserRequest.php @@ -0,0 +1,31 @@ +|string> + */ + public function rules(): array + { + return [ + 'email' => ['required', 'email', 'max:255'], + 'password' => 'required', + 'remember_me' => 'nullable|boolean', + ]; + } +} diff --git a/resources/views/auth/login.blade.php b/resources/views/auth/login.blade.php index acded5f..ea385c3 100644 --- a/resources/views/auth/login.blade.php +++ b/resources/views/auth/login.blade.php @@ -1,5 +1,6 @@ -
+
-
+ + @session('error') + + {{$value}} + + @endsession + + @session('userRegistered') + + {{$value}} + + @endsession + + + @csrf
- +
Forgot password? diff --git a/resources/views/auth/register.blade.php b/resources/views/auth/register.blade.php index 2112309..2233d61 100644 --- a/resources/views/auth/register.blade.php +++ b/resources/views/auth/register.blade.php @@ -31,7 +31,7 @@ class="bg-linear-135 flex-1 overflow-y-scroll wrapper py-12 from-[#EFF6FF] to-[#

Already have an account? - Sign In + Sign In

diff --git a/resources/views/components/navbar.blade.php b/resources/views/components/navbar.blade.php index ea002b9..f8b9962 100644 --- a/resources/views/components/navbar.blade.php +++ b/resources/views/components/navbar.blade.php @@ -1,6 +1,6 @@
@@ -40,7 +49,7 @@ - Login + Login Register diff --git a/resources/views/components/ui/alert-error.blade.php b/resources/views/components/ui/alert-error.blade.php new file mode 100644 index 0000000..b8f5c2a --- /dev/null +++ b/resources/views/components/ui/alert-error.blade.php @@ -0,0 +1,3 @@ +
+ {{$slot}} +
diff --git a/resources/views/components/ui/alert-success.blade.php b/resources/views/components/ui/alert-success.blade.php new file mode 100644 index 0000000..ef903cb --- /dev/null +++ b/resources/views/components/ui/alert-success.blade.php @@ -0,0 +1,3 @@ +
+ {{$slot}} +
diff --git a/resources/views/components/ui/input.blade.php b/resources/views/components/ui/input.blade.php index 22e8e29..8ae164a 100644 --- a/resources/views/components/ui/input.blade.php +++ b/resources/views/components/ui/input.blade.php @@ -5,6 +5,6 @@ @endif + name="{{$name}}" value="{{old($name)}}"> diff --git a/resources/views/dashboards/admin.blade.php b/resources/views/dashboards/admin.blade.php new file mode 100644 index 0000000..9302370 --- /dev/null +++ b/resources/views/dashboards/admin.blade.php @@ -0,0 +1,3 @@ + + + diff --git a/resources/views/dashboards/broker.blade.php b/resources/views/dashboards/broker.blade.php new file mode 100644 index 0000000..3fb7684 --- /dev/null +++ b/resources/views/dashboards/broker.blade.php @@ -0,0 +1,3 @@ + + + diff --git a/resources/views/dashboards/user.blade.php b/resources/views/dashboards/user.blade.php new file mode 100644 index 0000000..3968f6d --- /dev/null +++ b/resources/views/dashboards/user.blade.php @@ -0,0 +1,3 @@ + + + diff --git a/routes/web.php b/routes/web.php index 1599687..5b8bfaa 100644 --- a/routes/web.php +++ b/routes/web.php @@ -1,11 +1,20 @@ name('home'); -Route::view('/login', 'auth.login')->name('login'); +Route::middleware('guest')->group(function () { + Route::resource('/login', AuthenticatedUserController::class)->only(['create', 'store']); + Route::resource('/register', RegisteredUserController::class)->only(['create', 'store']); +}); -Route::resource('/register', RegisteredUserController::class)->only(['create', 'store']); +Route::middleware('auth')->group(function () { + Route::delete('/logout', [AuthenticatedUserController::class, 'destroy'])->name('logout'); + Route::view('/user/dashboard', 'dashboards.user')->name('user.dashboard'); + Route::view('/broker/dashboard', 'dashboards.broker')->name('broker.dashboard'); + Route::view('/admin/dashboard', 'dashboards.admin')->name('admin.dashboard'); +});