redirectByRole((string) $request->user()->role, $request); } return view('auth.login'); } public function showRegisterForm(Request $request): View|RedirectResponse { if (Auth::check()) { return $this->redirectByRole((string) $request->user()->role, $request); } return view('auth.register'); } public function login(Request $request): RedirectResponse { if (Auth::check()) { return $this->redirectByRole((string) $request->user()->role, $request); } $credentials = $request->validate([ 'email' => ['required', 'email'], 'password' => ['required', 'string'], ], [ 'email.required' => 'Email wajib diisi.', 'email.email' => 'Format email tidak valid.', 'password.required' => 'Password wajib diisi.', ]); if (!Auth::attempt($credentials, $request->boolean('remember'))) { return back() ->withErrors([ 'email' => 'Email atau password salah.', ]) ->onlyInput('email'); } $request->session()->regenerate(); $user = $request->user(); return $this->redirectByRole((string) $user->role, $request); } public function register(Request $request): RedirectResponse { if (Auth::check()) { return $this->redirectByRole((string) $request->user()->role, $request); } $validated = $request->validate([ 'name' => ['required', 'string', 'max:100'], 'email' => ['required', 'email:rfc,dns', 'max:255', 'unique:users,email'], 'phone' => ['required', 'string', 'max:20'], 'password' => ['required', 'string', 'min:8', 'confirmed'], 'terms' => ['accepted'], ], [ 'name.required' => 'Nama lengkap wajib diisi.', 'name.max' => 'Nama maksimal 100 karakter.', 'email.required' => 'Email wajib diisi.', 'email.email' => 'Format email tidak valid.', 'email.unique' => 'Email sudah terdaftar. Silakan login.', 'phone.required' => 'Nomor HP wajib diisi.', 'phone.max' => 'Nomor HP maksimal 20 karakter.', 'password.required' => 'Password wajib diisi.', 'password.min' => 'Password minimal 8 karakter.', 'password.confirmed' => 'Konfirmasi password tidak cocok.', 'terms.accepted' => 'Anda harus menyetujui syarat dan ketentuan.', ]); User::create([ 'name' => $validated['name'], 'email' => $validated['email'], 'phone' => $validated['phone'], 'password' => Hash::make($validated['password']), 'role' => 'customer', ]); return redirect() ->route('login') ->with('success', 'Pendaftaran berhasil. Silakan login sebagai customer.'); } public function logout(Request $request): RedirectResponse { Auth::logout(); $request->session()->invalidate(); $request->session()->regenerateToken(); return redirect()->route('home'); } private function redirectByRole(string $role, Request $request): RedirectResponse { if ($role === 'super_admin') { return redirect()->route('super-admin.dashboard'); } if ($role === 'admin_rental') { return redirect()->route('admin-rental.dashboard'); } if ($role === 'customer') { return redirect()->route('home'); } Auth::logout(); $request->session()->invalidate(); $request->session()->regenerateToken(); return redirect()->route('login')->withErrors([ 'email' => 'Role akun tidak dikenali. Hubungi administrator.', ]); } }