validate([ 'nama_lengkap' => 'required|string|max:255', 'username' => 'required|string|unique:users,username', 'password' => 'required|min:6', 'alamat' => 'required', ], [ 'username.unique' => 'Maaf, username ini sudah terdaftar. Silakan buat username lain.', 'password.min' => 'Kata sandi terlalu pendek, minimal harus 6 karakter.', ]); User::create([ 'nama_lengkap' => $request->nama_lengkap, 'username' => $request->username, 'password' => Hash::make($request->password), 'alamat' => $request->alamat, 'role' => 'verifikator', // Default role saat daftar 'status' => 'nonaktif', ]); return redirect('/login')->with('success', 'Registrasi berhasil! Akun Anda sedang ditinjau. Silakan hubungi Admin Desa untuk aktivasi.'); } public function login(Request $request) { // Validasi input $credentials = $request->validate([ 'username' => 'required', 'password' => 'required', ]); // 1. Cari user berdasarkan username terlebih dahulu untuk cek statusnya $user = \App\Models\User::where('username', $request->username)->first(); if ($user) { // 2. Cek apakah akun aktif if ($user->status !== 'aktif') { return back()->with('error', 'Akun Anda belum aktif. Silakan hubungi Admin Desa untuk aktivasi.')->withInput($request->only('username')); } // 3. Jika aktif, baru coba lakukan proses login (Auth::attempt) if (Auth::attempt($credentials)) { $request->session()->regenerate(); // Redirect sesuai role if ($user->role === 'admin') { return redirect()->intended(route('admin.dashboard')); } if ($user->role === 'verifikator') { return redirect()->intended(route('verifikator.dashboard')); } } } // 4. Jika user tidak ditemukan atau password salah return back()->withErrors([ 'username' => 'Username atau password salah.', ])->withInput($request->only('username')); } public function logout(Request $request) { Auth::logout(); $request->session()->invalidate(); $request->session()->regenerateToken(); return redirect('/login'); } }