"use client"; import { useEffect } from "react"; import { useRouter } from "next/navigation"; import { client } from "@/shared/api"; import type { IUserInfo } from "@/shared/store"; import { useUserStore } from "@/shared/lib"; import { ENDPOINT, AUTH_USER_ID } from "@/shared/config"; import { getCookie } from "@/shared/lib"; import { LoginApi } from "../api/login-service"; const LOGIN_PAGE_URL = process.env.NEXT_PUBLIC_CM_LOGIN_PAGE_URL || "http://dev.onasys.co.kr:3000/auth/login"; // 로그인 페이지 URL const AuthWrapper = ({ children }: { children: React.ReactNode }) => { const router = useRouter(); const { userInfo, setUserInfo } = useUserStore((state) => state); async function authCheck() { const userId = getCookie(AUTH_USER_ID); if (!userId) { throw new Error("Missing required authentication tokens"); } const response = await client.get( `${ENDPOINT.USER_SERVICE.USERS}/info/me`, ); if (!userInfo) setUserInfo(response.data); } useEffect(() => { (async () => { try { await authCheck(); } catch (error) { console.error(error); try { await LoginApi.silentRefresh(); await authCheck(); } catch (refreshError) { console.error("Token refresh failed:", refreshError); setUserInfo(null); // router.push("/"); // 개발시 홈으로 돌아가기 window.location.href = LOGIN_PAGE_URL; // 세션 만료 시 CM 로그인 페이지로 리다이렉트 // router.push는 같은 Next.js 앱 내에서만 작동하므로 다른 앱으로 이동할 때는 window.location.href 사용 } } })(); }, []); return <>{children}; }; export { AuthWrapper };