1- import { useEffect } from "react" ;
1+ import { useEffect , useState } from "react" ;
22import {
33 BrowserRouter as Router ,
44 Routes ,
@@ -19,8 +19,10 @@ import KaKaoLogin from "@/pages/KaKaoLogin";
1919import MbtiTestIntro from "@/pages/MbtiTestIntro" ;
2020import MbtiTestQuestions from "@/pages/MbtiTestQuestions" ;
2121import MbtiTestResult from "@/pages/MbtiTestResult" ;
22- import CenteredLayout from "@/components/CenteredLayout" ;
2322import Error from "@/pages/Error" ;
23+ import CenteredLayout from "@/components/CenteredLayout" ;
24+ import ToastMessage from "@/components/ToastMessage" ;
25+ import useAuthStore from "@/store/useAuthStore" ;
2426
2527const PageTracker = ( ) => {
2628 const location = useLocation ( ) ;
@@ -69,14 +71,37 @@ const PageTracker = () => {
6971} ;
7072
7173const App = ( ) => {
74+ const { logout } = useAuthStore ( ) ;
75+ const [ toastMessage , setToastMessage ] = useState ( "" ) ;
76+ const storageAuth = localStorage . getItem ( "auth-storage" ) ;
77+ const parsedAuth = storageAuth ? JSON . parse ( storageAuth ) . state : null ;
78+
79+ const checkSession = ( ) => {
80+ const expirationTime = new Date (
81+ new Date ( parsedAuth . loginTime ) . getTime ( ) + 24 * 60 * 60 * 1000
82+ ) ;
83+ const now = new Date ( ) ;
84+ if ( now > expirationTime ) {
85+ setToastMessage ( "로그인 세션이 만료되었습니다." ) ;
86+ logout ( ) ;
87+ }
88+ } ;
89+
7290 useEffect ( ( ) => {
7391 initGA ( ) ;
92+ if ( parsedAuth ) checkSession ( ) ;
7493 } , [ ] ) ;
7594
7695 return (
7796 < Router >
7897 < PageTracker />
7998 < CenteredLayout >
99+ { toastMessage && (
100+ < ToastMessage
101+ message = { toastMessage }
102+ onClose = { ( ) => setToastMessage ( "" ) }
103+ />
104+ ) }
80105 < Routes >
81106 < Route path = "/" element = { < Home /> } />
82107 < Route path = "/select-info" element = { < SelectInfo /> } />
0 commit comments