store/auth использует токен из зустанда
This commit is contained in:
parent
18029e8133
commit
751c962480
@ -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",
|
||||
},
|
||||
});
|
||||
|
Loading…
Reference in New Issue
Block a user