From 553df337b2fb630368a907efd480d7ad9714e8a9 Mon Sep 17 00:00:00 2001 From: rivertw777 <105557972+rivertw777@users.noreply.github.com> Date: Tue, 24 Dec 2024 00:46:48 +0900 Subject: [PATCH] =?UTF-8?q?[feat]=20jwt=20=EC=9E=AC=EB=B0=9C=EA=B8=89=20?= =?UTF-8?q?=ED=9B=85=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ticketping/src/component/CheckExpiredToken.js | 29 +++++++++++++++++++ ticketping/src/component/Logout.js | 7 ++++- 2 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 ticketping/src/component/CheckExpiredToken.js diff --git a/ticketping/src/component/CheckExpiredToken.js b/ticketping/src/component/CheckExpiredToken.js new file mode 100644 index 0000000..26c85dc --- /dev/null +++ b/ticketping/src/component/CheckExpiredToken.js @@ -0,0 +1,29 @@ +import { axiosInstance } from "../api"; +import { useAppContext, deleteToken, setToken } from "../store"; + +export const useCheckExpiredToken = () => { + const { dispatch } = useAppContext(); + const { store: { jwtToken }} = useAppContext(); + + const checkExpiredToken = async (errorMessage) => { + if (errorMessage == "토큰이 만료되었습니다.") { + const headers = { Authorization: jwtToken }; + + try { + const response = await axiosInstance.post( + "/api/v1/auth/refresh", + {}, + { headers } + ); + const jwtToken = response.data.data.accessToken; + + dispatch(deleteToken()); + dispatch(setToken(jwtToken)); + } catch (err) { + + } + } + }; + + return { checkExpiredToken }; +}; diff --git a/ticketping/src/component/Logout.js b/ticketping/src/component/Logout.js index 7f954f1..6783fea 100644 --- a/ticketping/src/component/Logout.js +++ b/ticketping/src/component/Logout.js @@ -3,12 +3,16 @@ import { notification } from "antd"; import { MehOutlined } from "@ant-design/icons"; import { axiosInstance } from "../api"; import { useAppContext, deleteToken } from "../store"; +import { useCheckExpiredToken } from "./CheckExpiredToken"; export const useLogout = () => { const navigate = useNavigate(); const { dispatch } = useAppContext(); const { store: { jwtToken } } = useAppContext(); + // 토큰 만료 확인 및 재발급 + const { checkExpiredToken } = useCheckExpiredToken(); + const logout = async () => { const headers = { Authorization: jwtToken }; @@ -24,7 +28,8 @@ export const useLogout = () => { navigate("/"); } catch (error) { - console.error("로그아웃 중 오류 발생:", error); + // 토큰 만료 확인 및 재발급 + checkExpiredToken(error.response.data); } };