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";
|
import { authStore } from "@root/stores/auth";
|
||||||
|
|
||||||
const Header: React.FC = () => {
|
const Header: React.FC = () => {
|
||||||
const { makeRequest } = authStore();
|
const { makeRequest, clearToken } = authStore();
|
||||||
return (
|
return (
|
||||||
<React.Fragment>
|
<React.Fragment>
|
||||||
<Box
|
<Box
|
||||||
@ -55,7 +55,7 @@ const Header: React.FC = () => {
|
|||||||
makeRequest({
|
makeRequest({
|
||||||
url: "https://admin.pena.digital/auth/logout",
|
url: "https://admin.pena.digital/auth/logout",
|
||||||
contentType: true,
|
contentType: true,
|
||||||
}).then(() => localStorage.setItem("AT", ""));
|
}).then(() => clearToken());
|
||||||
}}
|
}}
|
||||||
sx={{
|
sx={{
|
||||||
display: "flex",
|
display: "flex",
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import axios, { AxiosError, AxiosResponse } from "axios";
|
import axios, { AxiosError, AxiosResponse } from "axios";
|
||||||
import { create } from "zustand";
|
import { create } from "zustand";
|
||||||
import { devtools } from "zustand/middleware";
|
import { persist } from "zustand/middleware";
|
||||||
|
|
||||||
type Token = string;
|
type Token = string;
|
||||||
|
|
||||||
@ -22,7 +22,7 @@ interface FirstRequest<T> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export const authStore = create<AuthStore>()(
|
export const authStore = create<AuthStore>()(
|
||||||
devtools(
|
persist(
|
||||||
(set, get) => ({
|
(set, get) => ({
|
||||||
token: "",
|
token: "",
|
||||||
setToken: (newToken) => set({ token: newToken }),
|
setToken: (newToken) => set({ token: newToken }),
|
||||||
@ -56,7 +56,6 @@ async function makeRequest<TRequest, TResponse>({
|
|||||||
token,
|
token,
|
||||||
}: MakeRequest<TRequest>) {
|
}: MakeRequest<TRequest>) {
|
||||||
//В случае 401 рефреш должен попробовать вызваться 1 раз
|
//В случае 401 рефреш должен попробовать вызваться 1 раз
|
||||||
let counterRefresh = true;
|
|
||||||
let headers: any = {};
|
let headers: any = {};
|
||||||
if (useToken) headers["Authorization"] = bearer ? "Bearer " + token : token;
|
if (useToken) headers["Authorization"] = bearer ? "Bearer " + token : token;
|
||||||
if (contentType) headers["Content-Type"] = "application/json";
|
if (contentType) headers["Content-Type"] = "application/json";
|
||||||
@ -79,10 +78,9 @@ async function makeRequest<TRequest, TResponse>({
|
|||||||
} catch (nativeError: unknown) {
|
} catch (nativeError: unknown) {
|
||||||
const error = nativeError as AxiosError;
|
const error = nativeError as AxiosError;
|
||||||
|
|
||||||
if (error?.response?.status === 401 && counterRefresh) {
|
if (error?.response?.status === 401) {
|
||||||
const refreshResponse = await refresh();
|
const refreshResponse = await refresh(token);
|
||||||
if (refreshResponse.data?.accessToken) HC(refreshResponse.data.accessToken);
|
if (refreshResponse.data?.accessToken) HC(refreshResponse.data.accessToken);
|
||||||
counterRefresh = false;
|
|
||||||
|
|
||||||
headers["Authorization"] = refreshResponse.data.accessToken;
|
headers["Authorization"] = refreshResponse.data.accessToken;
|
||||||
const response = await axios<TRequest, AxiosResponse<TResponse>>({ url, method, headers, data: body, signal });
|
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", {
|
return axios<never, AxiosResponse<{ accessToken: string }>>("https://admin.pena.digital/auth/refresh", {
|
||||||
headers: {
|
headers: {
|
||||||
Authorization: localStorage.getItem("AT"),
|
Authorization: token,
|
||||||
"Content-Type": "application/json",
|
"Content-Type": "application/json",
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user