validate([ 'email' => ['required', 'email'], 'password' => ['required'], ]); if (Auth::attempt($credentials, $request->boolean('remember'))) { $request->session()->regenerate(); if (!Auth::user()->is_active) { Auth::logout(); $request->session()->invalidate(); $request->session()->regenerateToken(); return back()->withErrors(['email' => 'Your account is pending approval by an administrator.']); } return redirect()->intended('/dashboard'); } return back()->withErrors([ 'email' => 'The provided credentials do not match our records.', ])->onlyInput('email'); } public function showRegister() { return view('auth.register'); } public function register(Request $request) { $validated = $request->validate([ 'name' => ['required', 'string', 'max:255'], 'email' => ['required', 'string', 'email', 'max:255', 'unique:users'], 'password' => ['required', 'confirmed', Password::defaults()], ]); $user = User::create([ 'name' => $validated['name'], 'email' => $validated['email'], 'password' => Hash::make($validated['password']), 'is_active' => false, // Require approval 'role' => 'reader', // Default ]); Auth::login($user); // Notify admin in real app return redirect('/dashboard')->with('status', 'Account created. Wait for approval.'); } public function logout(Request $request) { Auth::logout(); $request->session()->invalidate(); $request->session()->regenerateToken(); return redirect('/'); } }