Я использую перехватчики запросов и ответов.
Перехватчик запросов — он используется для помещения токена доступа в заголовок авторизации для каждого запроса.
Перехват ответа — он используется для проверки того, был ли ответ «Неавторизованный» с кодом состояния 401. Он предназначен для проверки того, истек ли срок действия токена доступа, если срок действия токена доступа истек, а затем обновить токен доступа (путем вызова API ) и после получения новый токен доступа снова делает этот исходный запрос с новым токеном доступа, эта часть работает отлично.
Диспетчеризация действий – я использовал набор инструментов Redux для хранения состояния моего приложения
Итак, что происходит, когда я делаю исходный запрос с новым токеном доступа, результат возвращается, но я хочу отправить то же действие, которое ранее было вызвано для этого исходного запроса, чтобы я мог сохранить результат нового вызова API внутри redux
было бы не было проблем, если было только одно действие отправки, но их несколько, поскольку у меня много компонентов, и каждый компонент имеет свое собственное действие отправки.
как мне написать код, чтобы убедиться, что новый API вызов с новым токеном доступа отправляет то же действие, которое было отменено из-за ошибки 401
import axios from "axios";
import { api } from "../config";
import { refreshAccessToken } from "./fakebackend_helper";
axios.defaults.withCredentials = true;
axios.defaults.baseURL = api.API_URL;
axios.defaults.headers.post["Content-Type"] = "application/json";
axios.interceptors.request.use(function (config) {
const latestToken = localStorage.getItem("access_token"); // Fetch the latest token
if (latestToken) {
config.headers.Authorization = `Bearer ${latestToken}`;
}
return config;
});
axios.interceptors.response.use(
function (response) {
return response.data ? response.data : response;
},
async function (error) {
try {
const errorResponse = error.response;
if (
errorResponse.status === 401 &&
errorResponse.data.message === "Unauthorized" &&
!error.config._retry
) {
const res = await refreshAccessToken();
const newAccessToken = res.data.access_token;
error.config._retry = true;
axios.defaults.headers.common[
"Authorization"
] = `Bearer ${newAccessToken}`;
localStorage.setItem("access_token", newAccessToken);
sessionStorage.setItem("access_token", newAccessToken);
error.config.headers["Authorization"] = `Bearer ${newAccessToken}`;
console.log("ERROR RE-REQUEST CONFIG ->", error.config);
return axios(error.config);
}
return Promise.reject(error);
} catch (error) {
console.log("Error while re-requesting the access token ->", error);
return Promise.reject(error); //
}
}
);
< /code>
Вот код одного из редукторов < /p>
import { createSlice } from "@reduxjs/toolkit";
import {
inviteWorkspaceMember,
setPasswordWorkspaceMember,
getWorkspaceMembers,
} from "./thunk";
export const initialState = {
workspaceMembers: [],
error: "",
};
const workspaceMembersSlice = createSlice({
name: "workspaceMembers",
initialState,
reducers: {},
extraReducers: (builder) => {
builder.addCase(getWorkspaceMembers.fulfilled, (state, action) => {
state.workspaceMembers = action.payload.workspaceMembers;
});
builder.addCase(inviteWorkspaceMember.fulfilled, (state, action) => {
state.workspaceMembers = [...state.workspaceMembers, action.payload.data];
});
},
});
export default workspaceMembersSlice.reducer;
Вот это идея
import { createAsyncThunk } from "@reduxjs/toolkit";
import {
getWorkspaceMembers as getWorkspaceMembersApi,
inviteWorkspaceMember as inviteWorkspaceMemberApi,
setPasswordWorkspaceMember as setPasswordWorkspaceMemberApi,
} from "../../helpers/fakebackend_helper";
export const getWorkspaceMembers = createAsyncThunk(
"workspaceMembers/getWorkspaceMembers",
async (workspaceId) => {
try {
const response = await getWorkspaceMembersApi(workspaceId);
return response;
} catch (error) {
console.log("error inside getting workspace members thunk", error);
}
}
);
Подробнее здесь: https://stackoverflow.com/questions/793 ... api-call-t
Как отправить то же действие внутри перехватчика Axios после создания нового вызова API через перехватчик ⇐ Javascript
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Axios бросает Uncaught TypeError: не удалось разрешить спецификатор модуля "Axios"
Anonymous » » в форуме Html - 0 Ответы
- 32 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Как отправить полезную нагрузку в API контроллера из перехватчика после ее расшифровки
Anonymous » » в форуме JAVA - 0 Ответы
- 58 Просмотры
-
Последнее сообщение Anonymous
-