validate([ 'username' => 'required|string|max:255|unique:users,username', 'email' => 'required|string|email|max:255|unique:users,email', 'password' => 'required|string|min:8|confirmed', ]); $user = User::create([ 'uid' => (string) Str::uuid(), 'name' => $request->username, 'username' => $request->username, 'email' => $request->email, 'password' => Hash::make($request->password), 'status' => 'pending', 'role' => null, 'email_verified_at' => null, ]); $user->update([ 'created_by' => $user->id, 'updated_by' => $user->id, ]); Profile::create([ 'user_id' => $user->id, 'user_uid' => $user->uid, 'role' => $request->role, 'nama' => $request->username, 'email' => $request->email, 'telepon' => $request->telepon, 'alamat' => $request->alamat, 'kk' => $request->kk, 'ktp' => $request->ktp, 'desa_kelurahan_id' => $request->desa_kelurahan_id, 'created_by' => $user->id, 'updated_by' => $user->id, ]); return redirect()->route('login')->with('success', 'Account created successfully. Please login.'); } public function verify(User $user) { try { $newStatus = $user->email_verified_at ? null : now(); $user->update([ 'email_verified_at' => $newStatus ]); return response()->json([ 'status' => 'success', 'message' => 'User status updated successfully' ]); } catch (\Exception $e) { return response()->json(['message' => 'Server Error'], 500); } } public function authenticate(Request $request) { $request->validate([ 'email_username' => 'required|string', 'password' => 'required|string', ]); $login = $request->input('email_username'); $field = filter_var($login, FILTER_VALIDATE_EMAIL) ? 'email' : 'name'; if (Auth::attempt([$field => $login, 'password' => $request->password], $request->boolean('remember'))) { if (Auth::user()->email_verified_at === null) { Auth::logout(); return back()->withErrors([ 'email_username' => 'Akun belum diverifikasi.', ]); } $request->session()->regenerate(); return redirect()->intended(''); } throw ValidationException::withMessages([ 'email_username' => ['Email atau username salah.'], ]); } public function logout(Request $request) { Auth::logout(); $request->session()->invalidate(); $request->session()->regenerateToken(); return redirect()->intended(''); } }