store/auth использует токен из зустанда

This commit is contained in:
krokodilka 2023-05-08 17:34:50 +03:00
parent 18029e8133
commit 751c962480
2 changed files with 8 additions and 10 deletions

@ -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 (
<React.Fragment>
<Box
@ -55,7 +55,7 @@ const Header: React.FC = () => {
makeRequest({
url: "https://admin.pena.digital/auth/logout",
contentType: true,
}).then(() => localStorage.setItem("AT", ""));
}).then(() => clearToken());
}}
sx={{
display: "flex",

@ -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<T> {
}
export const authStore = create<AuthStore>()(
devtools(
persist(
(set, get) => ({
token: "",
setToken: (newToken) => set({ token: newToken }),
@ -56,7 +56,6 @@ async function makeRequest<TRequest, TResponse>({
token,
}: MakeRequest<TRequest>) {
//В случае 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<TRequest, TResponse>({
} 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<TRequest, AxiosResponse<TResponse>>({ url, method, headers, data: body, signal });
@ -94,10 +92,10 @@ async function makeRequest<TRequest, TResponse>({
}
}
function refresh() {
function refresh(token:Token) {
return axios<never, AxiosResponse<{ accessToken: string }>>("https://admin.pena.digital/auth/refresh", {
headers: {
Authorization: localStorage.getItem("AT"),
Authorization: token,
"Content-Type": "application/json",
},
});