11// src/api/globalFetch.js
22
3+ import { promptLogin } from "../utils/auth" ;
4+
35// 1. 기존의 window.fetch 함수를 백업해둡니다.
46const originalFetch = window . fetch ;
57
@@ -9,17 +11,16 @@ window.fetch = async (...args) => {
911 const response = await originalFetch ( ...args ) ;
1012
1113 // 4. 응답을 받은 후, 인증 실패(401/403)가 발생했다면
12- if ( response . status === 401 || response . status === 403 ) {
13- // 이전에 localStorage에 저장된 토큰이 있을 때만 로그아웃 처리
14- if ( localStorage . getItem ( 'token' ) ) {
15- localStorage . removeItem ( 'token' ) ;
16- localStorage . removeItem ( 'username' ) ;
14+ if ( ( response . status === 401 || response . status === 403 ) && localStorage . getItem ( "token" ) ) {
15+ localStorage . removeItem ( "token" ) ;
16+ localStorage . removeItem ( "username" ) ;
17+ localStorage . removeItem ( "userId" ) ;
18+ localStorage . removeItem ( "role" ) ;
19+
20+ window . dispatchEvent ( new Event ( "dv:auth-updated" ) ) ;
1721
18- alert ( '세션이 만료되었습니다. 다시 로그인해 주세요.' ) ;
19- // 현재 페이지를 새로고침하여 로그인 상태를 갱신합니다.
20- // 로그인 페이지로 강제 이동시키는 것보다 사용자 경험이 더 나을 수 있습니다.
21- window . location . reload ( ) ;
22- }
22+ const redirectTo = window . location . hash ? window . location . hash . replace ( / ^ # / , "" ) || "/" : window . location . pathname || "/" ;
23+ promptLogin ( "세션이 만료되었습니다. 다시 로그인해 주세요." , { redirectTo } ) ;
2324 }
2425
2526 // 5. 원래 API를 호출했던 곳에 응답을 그대로 돌려줍니다.
0 commit comments