From 210bf24e451d93f06774d93c6fddd86386b72ba6 Mon Sep 17 00:00:00 2001 From: icurfer Date: Wed, 28 May 2025 13:05:48 +0900 Subject: [PATCH] =?UTF-8?q?jwt=ED=86=A0=ED=81=B0=20=EB=A7=8C=EB=A3=8C=20?= =?UTF-8?q?=EB=A1=9C=EA=B7=B8=EC=95=84=EC=9B=83=EB=8F=99=EC=9E=91=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/ansibleApi.js | 2 ++ src/api/authApi.js | 2 ++ src/api/blogApi.js | 2 ++ src/api/boardApi.js | 3 +++ src/api/createApi.js | 14 +++++++++++ src/api/todoApi.js | 2 ++ src/api/tokenUtils.js | 1 + src/context/AuthContext.js | 50 +++++++++++++++++++++++--------------- version | 2 +- 9 files changed, 58 insertions(+), 20 deletions(-) create mode 100644 src/api/createApi.js diff --git a/src/api/ansibleApi.js b/src/api/ansibleApi.js index 35b78fa..37d5a98 100644 --- a/src/api/ansibleApi.js +++ b/src/api/ansibleApi.js @@ -1,6 +1,8 @@ // src/api/todoApi.js import axios from 'axios'; import { attachAuthInterceptors } from './attachInterceptors'; +import { createApi } from './createApi'; +export const initAnsibleApi = (logout) => createApi(process.env.REACT_APP_API_ANSIBLE, logout); const ansibleApi = axios.create({ baseURL: process.env.REACT_APP_API_ANSIBLE, diff --git a/src/api/authApi.js b/src/api/authApi.js index 9513f0f..0d31a4e 100644 --- a/src/api/authApi.js +++ b/src/api/authApi.js @@ -1,6 +1,8 @@ // src/api/authApi.js import axios from "axios"; import { attachAuthInterceptors } from "./attachInterceptors"; +import { createApi } from './createApi'; +export const initAuthApi = (logout) => createApi(process.env.REACT_APP_API_AUTH, logout); const authApi = axios.create({ baseURL: process.env.REACT_APP_API_AUTH, diff --git a/src/api/blogApi.js b/src/api/blogApi.js index e8dbeab..881c4c0 100644 --- a/src/api/blogApi.js +++ b/src/api/blogApi.js @@ -1,6 +1,8 @@ // src/api/blogApi.js import axios from 'axios'; import { attachAuthInterceptors } from './attachInterceptors'; +import { createApi } from './createApi'; +export const initBlogApi = (logout) => createApi(process.env.REACT_APP_API_BLOG, logout); const blogApi = axios.create({ baseURL: process.env.REACT_APP_API_BLOG, diff --git a/src/api/boardApi.js b/src/api/boardApi.js index 6839e17..39aaa5a 100644 --- a/src/api/boardApi.js +++ b/src/api/boardApi.js @@ -1,5 +1,8 @@ +// src/api/boardApi.js import axios from "axios"; import { attachAuthInterceptors } from "./attachInterceptors"; +import { createApi } from './createApi'; +export const initBoardApi = (logout) => createApi(process.env.REACT_APP_API_BOARD, logout); const boardApi = axios.create({ baseURL: process.env.REACT_APP_API_BOARD, // ex) http://localhost:8801/api diff --git a/src/api/createApi.js b/src/api/createApi.js new file mode 100644 index 0000000..3d8d492 --- /dev/null +++ b/src/api/createApi.js @@ -0,0 +1,14 @@ +// src/api/createApi.js +import axios from 'axios'; +import { attachAuthInterceptors } from './attachInterceptors'; + + +export const createApi = (baseURL, logout = null) => { + const instance = axios.create({ + baseURL, + headers: { 'Content-Type': 'application/json' }, + }); + + attachAuthInterceptors(instance, logout); + return instance; +}; diff --git a/src/api/todoApi.js b/src/api/todoApi.js index 6f5a120..0cf7ad5 100644 --- a/src/api/todoApi.js +++ b/src/api/todoApi.js @@ -1,6 +1,8 @@ // src/api/todoApi.js import axios from 'axios'; import { attachAuthInterceptors } from './attachInterceptors'; +import { createApi } from './createApi'; +export const initTodoApi = (logout) => createApi(process.env.REACT_APP_API_TODO, logout); const todoApi = axios.create({ baseURL: process.env.REACT_APP_API_TODO, diff --git a/src/api/tokenUtils.js b/src/api/tokenUtils.js index d620ba3..4b4fe27 100644 --- a/src/api/tokenUtils.js +++ b/src/api/tokenUtils.js @@ -1,3 +1,4 @@ +// src/api/tokenUtils.js import axios from 'axios'; export const refreshAccessToken = async () => { diff --git a/src/context/AuthContext.js b/src/context/AuthContext.js index 3a91f98..0d53bab 100644 --- a/src/context/AuthContext.js +++ b/src/context/AuthContext.js @@ -1,36 +1,48 @@ -// src/context/AuthContext.js +// ✅ 8. src/context/AuthContext.js import { createContext, useContext, useState, useEffect } from 'react'; -import { decodeToken } from '../utils/jwt'; // ✅ JWT 디코딩 유틸 사용 +import { decodeToken } from '../utils/jwt'; +import { initAuthApi } from '../api/authApi'; +import { initBlogApi } from '../api/blogApi'; +import { initBoardApi } from '../api/boardApi'; +import { initTodoApi } from '../api/todoApi'; +import { initAnsibleApi } from '../api/ansibleApi'; const AuthContext = createContext(); export const AuthProvider = ({ children }) => { const [isLoggedIn, setIsLoggedIn] = useState(false); - const [user, setUser] = useState(null); // ✅ 추가 + const [user, setUser] = useState(null); - useEffect(() => { - const token = localStorage.getItem('access'); - if (token) { - const decoded = decodeToken(token); // payload 추출 - setUser(decoded); - setIsLoggedIn(true); - } - }, []); + const logout = () => { + localStorage.removeItem('access'); + localStorage.removeItem('refresh'); + setUser(null); + setIsLoggedIn(false); + }; const login = (tokenObj) => { localStorage.setItem('access', tokenObj.access); localStorage.setItem('refresh', tokenObj.refresh); const decoded = decodeToken(tokenObj.access); - setUser(decoded); // ✅ 로그인 시 user 저장 + setUser(decoded); setIsLoggedIn(true); }; - const logout = () => { - localStorage.removeItem('access'); - localStorage.removeItem('refresh'); - setUser(null); // ✅ 로그아웃 시 제거 - setIsLoggedIn(false); - }; + useEffect(() => { + const token = localStorage.getItem('access'); + if (token) { + const decoded = decodeToken(token); + setUser(decoded); + setIsLoggedIn(true); + } + + // ✅ API 초기화 시 logout 주입 + initAuthApi(logout); + initBlogApi(logout); + initBoardApi(logout); + initTodoApi(logout); + initAnsibleApi(logout); + }, []); return ( @@ -39,4 +51,4 @@ export const AuthProvider = ({ children }) => { ); }; -export const useAuth = () => useContext(AuthContext); +export const useAuth = () => useContext(AuthContext); \ No newline at end of file diff --git a/version b/version index 0e365fb..e92a7b7 100644 --- a/version +++ b/version @@ -1 +1 @@ -0.0.17-rc2 \ No newline at end of file +0.0.17-rc3 \ No newline at end of file