import { AuthService } from "@/services"; import { useAuthStore } from "@/stores"; import { tokenStorage, TokenUtils } from "@/utils"; import { cookieStorage } from "@/utils/cookieStorage"; import { useCallback, useEffect } from "react"; export function useAuth() { const { isAuthenticated, isLoading, setAuthenticated, setLoading, clear } = useAuthStore(); useEffect(() => { (async () => { setLoading(true); try { const accessToken = await tokenStorage.getAccessToken(); const refreshToken = await cookieStorage.getRefreshToken(); if (accessToken && refreshToken) { if (!TokenUtils.isTokenExpired(accessToken)) { setAuthenticated(true); } else { const reissueResult = await AuthService.reissueToken(); setAuthenticated(reissueResult.success); if (!reissueResult.success) { console.warn("토큰 재발급 실패"); clear(); } } } } catch (error) { console.error("Authentication error:", error); clear(); } finally { setLoading(false); } })(); }, [setAuthenticated, setLoading, clear]); const login = useCallback( async (success: boolean) => { setAuthenticated(success); }, [setAuthenticated] ); const logout = useCallback(async () => { await AuthService.logout(); clear(); }, [clear]); const loginError = useCallback((error: unknown) => { console.error("Login error:", error); clear(); }, [clear]); return { isAuthenticated, isLoading, login, logout, loginError, }; }