diff --git a/src/pages/dashboard/Header/index.tsx b/src/pages/dashboard/Header/index.tsx index be7cdb1..663383e 100644 --- a/src/pages/dashboard/Header/index.tsx +++ b/src/pages/dashboard/Header/index.tsx @@ -6,7 +6,7 @@ import Logo from "../../Logo"; import { authStore } from "@root/stores/auth"; const Header: React.FC = () => { - const { makeRequest } = authStore(); + const { makeRequest, clearToken } = authStore(); return ( { makeRequest({ url: "https://admin.pena.digital/auth/logout", contentType: true, - }).then(() => localStorage.setItem("AT", "")); + }).then(() => clearToken()); }} sx={{ display: "flex", diff --git a/src/stores/auth.ts b/src/stores/auth.ts index 91b86c2..36ba3da 100644 --- a/src/stores/auth.ts +++ b/src/stores/auth.ts @@ -1,6 +1,6 @@ import axios, { AxiosError, AxiosResponse } from "axios"; import { create } from "zustand"; -import { devtools } from "zustand/middleware"; +import { persist } from "zustand/middleware"; type Token = string; @@ -22,7 +22,7 @@ interface FirstRequest { } export const authStore = create()( - devtools( + persist( (set, get) => ({ token: "", setToken: (newToken) => set({ token: newToken }), @@ -56,7 +56,6 @@ async function makeRequest({ token, }: MakeRequest) { //В случае 401 рефреш должен попробовать вызваться 1 раз - let counterRefresh = true; let headers: any = {}; if (useToken) headers["Authorization"] = bearer ? "Bearer " + token : token; if (contentType) headers["Content-Type"] = "application/json"; @@ -79,10 +78,9 @@ async function makeRequest({ } catch (nativeError: unknown) { const error = nativeError as AxiosError; - if (error?.response?.status === 401 && counterRefresh) { - const refreshResponse = await refresh(); + if (error?.response?.status === 401) { + const refreshResponse = await refresh(token); if (refreshResponse.data?.accessToken) HC(refreshResponse.data.accessToken); - counterRefresh = false; headers["Authorization"] = refreshResponse.data.accessToken; const response = await axios>({ url, method, headers, data: body, signal }); @@ -94,10 +92,10 @@ async function makeRequest({ } } -function refresh() { +function refresh(token:Token) { return axios>("https://admin.pena.digital/auth/refresh", { headers: { - Authorization: localStorage.getItem("AT"), + Authorization: token, "Content-Type": "application/json", }, });