check()) { return redirect()->route('dashboard'); } if (Auth::check()) { return redirect()->route('user.dashboard'); } return view('login'); } /** * Proses login. */ public function login(Request $request) { $request->validate([ 'username' => 'required|string', 'password' => 'required|string', ], [ 'username.required' => 'Username wajib diisi.', 'password.required' => 'Password wajib diisi.', ]); $credentials = [ 'username' => $request->username, 'password' => $request->password, ]; if (Auth::guard('admin')->attempt($credentials)) { $request->session()->regenerate(); return redirect()->intended(route('dashboard')); } if (Auth::attempt($credentials)) { $request->session()->regenerate(); return redirect()->intended(route('user.dashboard')); } return back() ->withInput($request->only('username')) ->with('error', 'Username atau password salah.'); } /** * Tampilkan halaman register. */ public function showRegister() { return view('register'); } /** * Proses registrasi user baru. */ public function register(Request $request) { $request->validate([ 'username' => 'required|string|max:255|unique:user,username', 'email' => 'required|email|max:255|unique:user,email', 'password' => 'required|string|min:6|confirmed', ], [ 'username.required' => 'Username wajib diisi.', 'username.unique' => 'Username sudah digunakan.', 'email.required' => 'Email wajib diisi.', 'email.unique' => 'Email sudah terdaftar.', 'password.required' => 'Password wajib diisi.', 'password.min' => 'Password minimal 6 karakter.', 'password.confirmed' => 'Konfirmasi password tidak cocok.', ]); $user = User::create([ 'username' => $request->username, 'email' => $request->email, 'password' => Hash::make($request->password), 'role' => 'user', ]); return redirect()->route('login')->with('success', 'Registrasi berhasil. Silakan login dengan akun Anda.'); } /** * Tampilkan halaman lupa password. */ public function showForgotPassword() { return view('forgot-password'); } /** * Kirim link reset password ke email user. */ public function sendResetPasswordLink(Request $request) { $request->validate([ 'email' => 'required|email|exists:user,email', ], [ 'email.required' => 'Email wajib diisi.', 'email.email' => 'Format email tidak valid.', 'email.exists' => 'Email tidak terdaftar.', ]); $status = Password::sendResetLink($request->only('email')); if ($status === Password::RESET_LINK_SENT) { return back()->with('success', 'Link verifikasi reset password sudah dikirim ke email Anda.'); } return back() ->withInput($request->only('email')) ->with('error', 'Link reset password gagal dikirim. Silakan coba lagi.'); } /** * Tampilkan halaman password baru dari link email. */ public function showResetPassword(Request $request, string $token) { return view('reset-password', [ 'token' => $token, 'email' => $request->email, ]); } /** * Simpan password baru. */ public function resetPassword(Request $request) { $request->validate([ 'token' => 'required', 'email' => 'required|email', 'password' => 'required|string|min:6|confirmed', ], [ 'password.required' => 'Password baru wajib diisi.', 'password.min' => 'Password minimal 6 karakter.', 'password.confirmed' => 'Konfirmasi password tidak cocok.', ]); $status = Password::reset( $request->only('email', 'password', 'password_confirmation', 'token'), function (User $user, string $password) { $user->forceFill([ 'password' => Hash::make($password), 'login_otp' => null, 'login_otp_expires_at' => null, ])->save(); } ); if ($status === Password::PASSWORD_RESET) { return redirect()->route('login')->with('success', 'Password berhasil diubah. Silakan login.'); } return back() ->withInput($request->only('email')) ->with('error', 'Link reset password tidak valid atau sudah kedaluwarsa.'); } /** * Proses logout. */ public function logout(Request $request) { if (Auth::guard('admin')->check()) { Auth::guard('admin')->logout(); } if (Auth::check()) { Auth::logout(); } $request->session()->invalidate(); $request->session()->regenerateToken(); return redirect()->route('login'); } }