diff --git a/src/components/layout/AppLayout.tsx b/src/components/layout/AppLayout.tsx index d5a7cdb..392543c 100644 --- a/src/components/layout/AppLayout.tsx +++ b/src/components/layout/AppLayout.tsx @@ -1,5 +1,9 @@ -import { useLocation } from 'react-router-dom'; +import { useLocation, useNavigate } from 'react-router-dom'; +import { useEffect } from 'react'; +import { useSelector } from 'react-redux'; +import type { RootState } from '@/store'; import FloatingButton from '@/components/common/FloatingButton'; +import axiosInstance from '@/api/axiosInstance'; interface Props { children: React.ReactNode; @@ -7,10 +11,38 @@ interface Props { export default function AppLayout({ children }: Props) { const location = useLocation(); + const navigate = useNavigate(); + const isLoggedIn = useSelector((state: RootState) => state.user.isLoggedIn); const isCommunityPage = location.pathname === '/community'; + // 로그인 상태일 때 nickname 체크 및 리다이렉트 + useEffect(() => { + const checkUserNickname = async () => { + if ( + !isLoggedIn || + location.pathname === '/nickname' || + location.pathname === '/login' + ) { + return; + } + + try { + const response = await axiosInstance.get('/api/v1/user/nickname'); + const nickname = response.data.results?.nickname; + + if (!nickname) { + navigate('/nickname', { replace: true }); + } + } catch (error) { + console.error('사용자 정보 확인 실패:', error); + } + }; + + checkUserNickname(); + }, [isLoggedIn, location.pathname, navigate]); + return ( -