From aecaf193ce724f3fa9defaec9c0250c5f92192c5 Mon Sep 17 00:00:00 2001 From: hamid zarghami Date: Tue, 27 May 2025 09:00:58 +0330 Subject: [PATCH] fix --- .DS_Store | Bin 6148 -> 6148 bytes .gitignore | 136 ++++++++++++++++++ src/App.tsx | 62 +------- src/config/axios.ts | 12 +- src/config/func.ts | 27 +++- src/pages/profile/components/Username.tsx | 2 +- src/pages/receipts/Detail.tsx | 4 +- .../receipts/components/ApproveInvoice.tsx | 4 +- src/pages/request/Request.tsx | 2 +- 9 files changed, 176 insertions(+), 73 deletions(-) diff --git a/.DS_Store b/.DS_Store index fa93c62b6a79bb8b252724f113969ad058cf6b2c..1b4b45b5df88d7921792cc6ec852c14a81faa30d 100644 GIT binary patch delta 87 zcmZoMXffC@g_T9ZDz|oW4y%kvZoZ34Qcivn0|NsGlcq8I(|5-lp%N)rCHM<641<&N Sa|?hv801zz*sRR { - if (error?.response?.status === 401) { - try { - // Use a flag to track if refresh is in progress - if (window.isRefreshingToken) { - // Wait for the refresh to complete - await new Promise(resolve => { - const checkComplete = setInterval(() => { - if (!window.isRefreshingToken) { - clearInterval(checkComplete); - resolve(true); - } - }, 100); - }); - return; - } - - // Set the flag to indicate refresh is in progress - window.isRefreshingToken = true; - - try { - const refreshTokenValue = await getRefreshToken(); - const { data } = await refreshToken({ refreshToken: refreshTokenValue || '' }); - - if (data?.accessToken?.token) { - // Save the new token - await setToken(data?.accessToken?.token); - - // If refresh token also returned, update it - if (data.refreshToken?.token) { - await setRefreshToken(data.refreshToken?.token); - } - - // Retry the failed request, even if it was muted - if (query) { - queryClient.invalidateQueries({ queryKey: query.queryKey }); - } else { - queryClient.invalidateQueries(); - } - return; - } else { - throw new Error('Invalid token response'); - } - } finally { - window.isRefreshingToken = false; - } - } catch (refreshError: unknown) { - console.error('Token refresh failed:', refreshError); - // Clear tokens and redirect to login - await removeToken(); - await removeRefreshToken(); - // window.location.href = '/auth/login'; - } - } - } - }), defaultOptions: { queries: { refetchOnWindowFocus: false, diff --git a/src/config/axios.ts b/src/config/axios.ts index e0e5ddc..c32fe9a 100644 --- a/src/config/axios.ts +++ b/src/config/axios.ts @@ -38,11 +38,19 @@ axiosInstance.interceptors.response.use( try { const refreshTokenValue = await getRefreshToken(); + if (!refreshTokenValue) { + removeRefreshToken(); + removeToken(); + window.location.href = buildPath("auth/login"); + return; + } const { data } = await refreshToken({ - refreshToken: refreshTokenValue || "", + refreshToken: refreshTokenValue, }); + alert("1"); if (data?.accessToken?.token) { + alert("1"); await setToken(data?.accessToken?.token); if (data.refreshToken?.token) { await setRefreshToken(data.refreshToken?.token); @@ -50,6 +58,8 @@ axiosInstance.interceptors.response.use( originalRequest.headers.Authorization = `Bearer ${data.accessToken.token}`; return axiosInstance(originalRequest); + } else { + alert("2"); } } catch (refreshError) { console.error("Token refresh failed:", refreshError); diff --git a/src/config/func.ts b/src/config/func.ts index f9c9f9f..ba41302 100644 --- a/src/config/func.ts +++ b/src/config/func.ts @@ -36,26 +36,43 @@ export const getToken = async () => { return Cookie.get(import.meta.env.VITE_TOKEN_NAME); }; -export const getRefreshToken = () => { +export const getRefreshToken = async () => { return Cookie.get(import.meta.env.VITE_REFRESH_TOKEN_NAME); }; +const isProduction = import.meta.env.MODE === "production"; const domain = window.location.hostname; export const setToken = (token: string) => { - Cookie.set(import.meta.env.VITE_TOKEN_NAME, token, { domain }); + Cookie.set(import.meta.env.VITE_TOKEN_NAME, token, { + domain, + secure: isProduction, + sameSite: "Lax", + }); }; export const setRefreshToken = (refreshToken: string) => { - Cookie.set(import.meta.env.VITE_REFRESH_TOKEN_NAME, refreshToken, { domain }); + Cookie.set(import.meta.env.VITE_REFRESH_TOKEN_NAME, refreshToken, { + domain, + secure: isProduction, + sameSite: "Lax", + }); }; export const removeToken = () => { - Cookie.remove(import.meta.env.VITE_TOKEN_NAME, { domain, path: "/" }); + Cookie.remove(import.meta.env.VITE_TOKEN_NAME, { + domain, + secure: isProduction, + sameSite: "Lax", + }); }; export const removeRefreshToken = () => { - Cookie.remove(import.meta.env.VITE_REFRESH_TOKEN_NAME, { domain, path: "/" }); + Cookie.remove(import.meta.env.VITE_REFRESH_TOKEN_NAME, { + domain, + secure: isProduction, + sameSite: "Lax", + }); }; export const getRedirectUrl = () => { diff --git a/src/pages/profile/components/Username.tsx b/src/pages/profile/components/Username.tsx index 91e9137..2b5f2de 100644 --- a/src/pages/profile/components/Username.tsx +++ b/src/pages/profile/components/Username.tsx @@ -60,7 +60,7 @@ const Username: FC = (props: Props) => { setStatus('') }, onError(error: ErrorType) { - toast(error?.response?.data?.message || 'خطا در تغییر نام کاربری', 'error') + toast(error?.response?.data?.error?.message[0] || 'خطا در تغییر نام کاربری', 'error') }, }) } diff --git a/src/pages/receipts/Detail.tsx b/src/pages/receipts/Detail.tsx index 63a6475..ee2bf19 100644 --- a/src/pages/receipts/Detail.tsx +++ b/src/pages/receipts/Detail.tsx @@ -38,7 +38,7 @@ const ReceiptsDetail: FC = () => { getInvoce.refetch() }, onError: (error: ErrorType) => { - toast(error?.response?.data?.message || 'خطا در پرداخت فاکتور', 'error') + toast(error?.response?.data?.error?.message[0], 'error') } }) } @@ -50,7 +50,7 @@ const ReceiptsDetail: FC = () => { getInvoce.refetch() }, onError: (error: ErrorType) => { - toast(error?.response?.data?.message || 'خطا در پرداخت فاکتور', 'error') + toast(error?.response?.data?.error?.message[0], 'error') } }) } diff --git a/src/pages/receipts/components/ApproveInvoice.tsx b/src/pages/receipts/components/ApproveInvoice.tsx index 7489c2e..b0ed23f 100644 --- a/src/pages/receipts/components/ApproveInvoice.tsx +++ b/src/pages/receipts/components/ApproveInvoice.tsx @@ -36,7 +36,7 @@ const ApproveInvoice: FC = ({ id, refetch, status }) => { setShowModal(false) }, onError: (error: ErrorType) => { - toast(error?.response?.data?.message || 'خطا در تایید فاکتور', 'error') + toast(error?.response?.data?.error?.message[0], 'error') } }) } @@ -52,7 +52,7 @@ const ApproveInvoice: FC = ({ id, refetch, status }) => { reset() }, onError: (error: ErrorType) => { - toast(error?.response?.data?.message || 'خطا در تایید فاکتور', 'error') + toast(error?.response?.data?.error?.message[0] || 'خطا در تایید فاکتور', 'error') } }) } diff --git a/src/pages/request/Request.tsx b/src/pages/request/Request.tsx index f1038c0..553462a 100644 --- a/src/pages/request/Request.tsx +++ b/src/pages/request/Request.tsx @@ -116,7 +116,7 @@ const Request: FC = () => { navigate(buildPath(Pages.dashboard, slug)) }, onError: (error: ErrorType) => { - toast(error?.response?.data?.message || 'خطا در ارسال درخواست', 'error') + toast(error?.response?.data?.error?.message[0], 'error') } }) }