value)->firstOrFail(); $email = $request->string('email')->toString(); $user = User::create([ 'name' => str($email)->before('@')->headline()->toString(), 'email' => $email, 'password' => Hash::make($request->string('password')->toString()), 'role_id' => $publicRole->id, ]); Auth::login($user); $this->auditTrailService->log( 'Authentication', 'register', 'Pengguna awam mendaftar akaun baharu.', $user, ); return redirect() ->route('portal.profile.edit') ->with('success', 'Pendaftaran berjaya. Sila lengkapkan profil anda.'); } public function login(LoginRequest $request): RedirectResponse { $matchedUser = User::where('email', $request->string('email'))->first(); if ($matchedUser && ! $matchedUser->is_active) { return back() ->withErrors(['email' => 'Akaun ini telah dinyahaktifkan. Sila hubungi pentadbir sistem.']) ->onlyInput('email'); } $credentials = $request->safe()->only('email', 'password'); if (! Auth::attempt($credentials, $request->boolean('remember'))) { return back() ->withErrors(['email' => 'Emel atau kata laluan tidak sah.']) ->onlyInput('email'); } $request->session()->regenerate(); $user = $request->user(); $user->forceFill(['last_login_at' => now()])->save(); $this->auditTrailService->log( 'Authentication', 'login', 'Pengguna berjaya log masuk ke sistem.', $user, ); return redirect()->route($user->role->slug === UserRole::ADMIN->value ? 'admin.dashboard' : ($user->role->slug === UserRole::STAFF->value ? 'staff.dashboard' : 'portal.dashboard')); } public function logout(): RedirectResponse { $user = request()->user(); if ($user) { $this->auditTrailService->log( 'Authentication', 'logout', 'Pengguna log keluar daripada sistem.', $user, ); } Auth::logout(); request()->session()->invalidate(); request()->session()->regenerateToken(); return redirect()->route('login')->with('success', 'Anda telah berjaya log keluar.'); } }