import { useState, useEffect } from 'react'; import { useNavigate } from '@remix-run/react'; export interface User { id: number; phone: string; nickname: string; avatarUrl: string; } export function useAuth() { const [isAuthenticated, setIsAuthenticated] = useState(false); const [isLoading, setIsLoading] = useState(true); const [user, setUser] = useState(null); const [token, setToken] = useState(null); const navigate = useNavigate(); useEffect(() => { const checkAuth = () => { const storedToken = localStorage.getItem('token'); const storedUser = localStorage.getItem('user'); if (storedToken && storedUser) { setIsAuthenticated(true); setUser(JSON.parse(storedUser)); setToken(storedToken); } else { setIsAuthenticated(false); setUser(null); setToken(null); } setIsLoading(false); }; checkAuth(); window.addEventListener('storage', checkAuth); return () => { window.removeEventListener('storage', checkAuth); }; }, []); const login = (newToken: string, userData: User) => { localStorage.setItem('token', newToken); localStorage.setItem('user', JSON.stringify(userData)); setIsAuthenticated(true); setUser(userData); setToken(newToken); }; const logout = () => { localStorage.removeItem('token'); localStorage.removeItem('user'); setIsAuthenticated(false); setUser(null); setToken(null); navigate('/'); }; return { isAuthenticated, isLoading, user, token, login, logout }; }