1- import { HashRouter , Routes , Route , useLocation , Navigate } from "react-router-dom" ;
1+ import { HashRouter , Routes , Route , useLocation , Navigate , useNavigate } from "react-router-dom" ;
22import { useEffect , useState } from "react" ;
3+ import { promptLogin } from "./utils/auth" ;
34
45import Header from "./components/header/Header" ;
56import Footer from "./components/footer/Footer" ; // Footer 컴포넌트 임포트 유지
@@ -23,6 +24,7 @@ import CodecastLive from "./components/codecast/codecastlive/CodecastLive";
2324
2425function AppContent ( ) {
2526 const location = useLocation ( ) ;
27+ const navigate = useNavigate ( ) ;
2628 const [ isDark , setIsDark ] = useState ( false ) ;
2729 const [ isLoggedIn , setIsLoggedIn ] = useState ( false ) ;
2830 const [ nickname , setNickname ] = useState ( '' ) ;
@@ -34,18 +36,36 @@ function AppContent() {
3436 const isCommunityPage = location . pathname . startsWith ( "/community" ) ;
3537 const isMyPage = location . pathname . startsWith ( "/mypage" ) ;
3638 const isCodecastPage = location . pathname . startsWith ( "/broadcast" ) || location . pathname . startsWith ( "/startbroadcast" ) ;
37- const shouldShowFooter = isMainPage && ! ( isSignupPage || isIdePage || isCommunityPage || isMyPage || isCodecastPage ) ;
39+ const shouldShowFooter = ! (
40+ isSignupPage ||
41+ isIdePage ||
42+ isCommunityPage ||
43+ isMyPage ||
44+ isCodecastPage ||
45+ isMainPage
46+ ) ;
3847
3948 useEffect ( ( ) => {
40- const token = localStorage . getItem ( 'token' ) ;
41- const storedUsername = localStorage . getItem ( 'username' ) ;
42- if ( token && storedUsername ) {
43- setIsLoggedIn ( true ) ;
44- setNickname ( storedUsername ) ;
45- } else {
46- setIsLoggedIn ( false ) ;
47- setNickname ( '' ) ;
48- }
49+ const syncAuthState = ( ) => {
50+ const token = localStorage . getItem ( 'token' ) ;
51+ const storedUsername = localStorage . getItem ( 'username' ) ;
52+ if ( token && storedUsername ) {
53+ setIsLoggedIn ( true ) ;
54+ setNickname ( storedUsername ) ;
55+ } else {
56+ setIsLoggedIn ( false ) ;
57+ setNickname ( '' ) ;
58+ }
59+ } ;
60+
61+ syncAuthState ( ) ;
62+ window . addEventListener ( 'storage' , syncAuthState ) ;
63+ window . addEventListener ( 'dv:auth-updated' , syncAuthState ) ;
64+
65+ return ( ) => {
66+ window . removeEventListener ( 'storage' , syncAuthState ) ;
67+ window . removeEventListener ( 'dv:auth-updated' , syncAuthState ) ;
68+ } ;
4969 } , [ ] ) ;
5070
5171 useEffect ( ( ) => {
@@ -64,6 +84,14 @@ function AppContent() {
6484 localStorage . setItem ( "theme" , isDark ? "dark" : "light" ) ;
6585 } , [ isDark ] ) ;
6686
87+ const MyPageGuard = ( { element } ) => {
88+ if ( ! isLoggedIn ) {
89+ promptLogin ( undefined , { redirectTo : location . pathname } ) ;
90+ return < Navigate to = "/" replace /> ;
91+ }
92+ return element ;
93+ } ;
94+
6795 return (
6896 < >
6997 { ! isSignupPage && (
@@ -90,7 +118,12 @@ function AppContent() {
90118 < Route path = "/broadcast" element = { < Codecast /> } />
91119 < Route path = "/startbroadcast" element = { < StartCodecast /> } />
92120 < Route path = "/broadcast/live" element = { < CodecastLive /> } />
93- < Route path = "/mypage" element = { < MyPageLayout nickname = { nickname } /> } >
121+ < Route
122+ path = "/mypage"
123+ element = { (
124+ < MyPageGuard element = { < MyPageLayout nickname = { nickname } /> } />
125+ ) }
126+ >
94127 < Route index element = { < Mypage nickname = { nickname } /> } />
95128 < Route path = "project" element = { < MyProject /> } />
96129 < Route path = "community" element = { < MyCommunity nickname = { nickname } /> } />
@@ -108,6 +141,13 @@ function AppContent() {
108141 onLoginSuccess = { ( ) => {
109142 setIsLoggedIn ( true ) ;
110143 setNickname ( localStorage . getItem ( 'username' ) || '' ) ;
144+ setIsLoginModalOpen ( false ) ;
145+
146+ const redirectTarget = sessionStorage . getItem ( 'dv:postLoginRedirect' ) ;
147+ if ( redirectTarget ) {
148+ sessionStorage . removeItem ( 'dv:postLoginRedirect' ) ;
149+ navigate ( redirectTarget , { replace : true } ) ;
150+ }
111151 } }
112152 />
113153 ) }
0 commit comments