useAuth.ts 1015 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. "use client";
  2. import { useCallback, useEffect, useState } from "react";
  3. import { useRouter } from "next/navigation";
  4. import type { AgentUser } from "../../agent/types";
  5. import { logout } from "../../agent/services/authApi";
  6. import { clearAgentUser, getAgentUser } from "@/utils/storage";
  7. export function useAuth() {
  8. const router = useRouter();
  9. const [agent, setAgent] = useState<AgentUser | null>(null);
  10. const [loading, setLoading] = useState(true);
  11. useEffect(() => {
  12. const current = getAgentUser();
  13. if (!current) {
  14. setLoading(false);
  15. router.push("/");
  16. return;
  17. }
  18. setAgent(current);
  19. setLoading(false);
  20. }, [router]);
  21. const handleLogout = useCallback(async () => {
  22. try {
  23. await logout();
  24. } catch (error) {
  25. console.error("退出登录失败:", error);
  26. } finally {
  27. clearAgentUser();
  28. router.push("/");
  29. }
  30. }, [router]);
  31. return {
  32. agent,
  33. loading,
  34. isAuthenticated: Boolean(agent),
  35. logout: handleLogout,
  36. };
  37. }