config('ldap.auth.enabled', false), ]); } public function login(Request $request) { $request->validate([ 'email' => 'required|string', 'password' => 'required|string', ]); // Rate limiting $key = 'login:' . $request->ip(); if (RateLimiter::tooManyAttempts($key, 5)) { $seconds = RateLimiter::availableIn($key); return back()->withErrors([ 'email' => "Too many login attempts. Please try again in {$seconds} seconds.", ]); } $credentials = [ 'email' => $request->email, 'password' => $request->password, ]; if (!Auth::attempt($credentials, $request->boolean('remember'))) { RateLimiter::hit($key, 300); return back()->withErrors(['email' => 'Invalid credentials.']); } RateLimiter::clear($key); $user = Auth::user(); if (!$user->is_active) { Auth::logout(); return back()->withErrors(['email' => 'Your account has been disabled.']); } $user->update([ 'last_login_at' => now(), 'last_login_ip' => $request->ip(), ]); activity() ->causedBy($user) ->log('User logged in from ' . $request->ip()); $request->session()->regenerate(); return redirect()->intended('/'); } public function logout(Request $request) { activity() ->causedBy(Auth::user()) ->log('User logged out'); Auth::logout(); $request->session()->invalidate(); $request->session()->regenerateToken(); return redirect()->route('login'); } }