11import { HashRouter , Routes , Route , useLocation } from "react-router-dom" ;
22import { useEffect , useState } from "react" ;
3- // ✅ 1. jwt-decode 라이브러리를 import 합니다.
4- import { jwtDecode } from "jwt-decode" ;
53
64import Header from "./components/header/Header" ;
7- import Footer from "./components/footer/Footer" ;
5+ import Footer from "./components/footer/Footer" ; // Footer 컴포넌트 임포트 유지
86import Main from "./components/mainpage/Main" ;
97import Login from "./components/login/Login" ;
108import SignUp from "./components/signup/SignUp" ;
@@ -20,7 +18,6 @@ import MyProject from "./components/mypage/MyProject";
2018import MyCommunity from "./components/mypage/MyCommunity" ;
2119import ScrollToTop from "./components/common/ScrollToTop" ;
2220import CommunityWrite from "./components/community/CommunityWrite" ;
23- import VisualizationModal from "./components/ide/VisualizationModal" ;
2421import PostDetail from "./components/community/PostDetail" ;
2522import CodecastLive from "./components/codecast/codecastlive/CodecastLive" ;
2623
@@ -33,42 +30,19 @@ function AppContent() {
3330
3431 const isSignupPage = location . pathname === "/signup" ;
3532 const isIdePage = location . pathname . startsWith ( "/ide" ) ;
33+ const isMainPage = location . pathname === "/" ; // 👈 추가: 메인 페이지 플래그
3634
37- // ✅ 2. 토큰 만료를 확인하는 로직으로 교체된 useEffect
3835 useEffect ( ( ) => {
3936 const token = localStorage . getItem ( 'token' ) ;
4037 const storedUsername = localStorage . getItem ( 'username' ) ;
41-
4238 if ( token && storedUsername ) {
43- try {
44- const decodedToken = jwtDecode ( token ) ;
45- // 토큰의 만료 시간(exp)이 현재 시간보다 이전이면 만료된 것
46- if ( decodedToken . exp * 1000 < Date . now ( ) ) {
47- // 토큰이 만료된 경우, 로그아웃 처리
48- localStorage . removeItem ( 'token' ) ;
49- localStorage . removeItem ( 'username' ) ;
50- setIsLoggedIn ( false ) ;
51- setNickname ( '' ) ;
52- console . log ( '만료된 토큰이 감지되어 자동 로그아웃되었습니다.' ) ;
53- } else {
54- // 토큰이 유효한 경우, 로그인 상태로 설정
55- setIsLoggedIn ( true ) ;
56- setNickname ( storedUsername ) ;
57- }
58- } catch ( error ) {
59- // 토큰 형식이 잘못된 경우에도 로그아웃 처리
60- localStorage . removeItem ( 'token' ) ;
61- localStorage . removeItem ( 'username' ) ;
62- setIsLoggedIn ( false ) ;
63- setNickname ( '' ) ;
64- console . error ( '잘못된 토큰 형식으로 인해 로그아웃 처리:' , error ) ;
65- }
39+ setIsLoggedIn ( true ) ;
40+ setNickname ( storedUsername ) ;
6641 } else {
67- // 토큰이 없는 경우, 기본적으로 로그아웃 상태
6842 setIsLoggedIn ( false ) ;
6943 setNickname ( '' ) ;
7044 }
71- } , [ ] ) ; // 앱이 처음 로드될 때 한 번만 실행됩니다.
45+ } , [ ] ) ;
7246
7347 useEffect ( ( ) => {
7448 const savedTheme = localStorage . getItem ( "theme" ) ;
@@ -105,7 +79,7 @@ function AppContent() {
10579 < Route path = "/community/post/:id" element = { < PostDetail /> } />
10680 < Route path = "/broadcast" element = { < Codecast /> } />
10781 < Route path = "/startbroadcast" element = { < StartCodecast /> } />
108- < Route path = "/broadcast/live" element = { < CodecastLive isDark = { isDark } /> } />
82+ < Route path = "/broadcast/live" element = { < CodecastLive /> } />
10983 < Route path = "/mypage" element = { < MyPageLayout nickname = { nickname } /> } >
11084 < Route index element = { < Mypage nickname = { nickname } /> } />
11185 < Route path = "project" element = { < MyProject /> } />
@@ -115,7 +89,8 @@ function AppContent() {
11589 </ Route >
11690 </ Routes >
11791
118- { ( ! isSignupPage && ! isIdePage ) && < Footer /> }
92+ { /* 👈 푸터는 메인 페이지, 회원가입, IDE 페이지에서는 숨깁니다. */ }
93+ { ( ! isSignupPage && ! isIdePage && ! isMainPage ) && < Footer /> }
11994
12095 { isLoginModalOpen && (
12196 < Login
0 commit comments