Как отправить то же действие внутри перехватчика Axios после создания нового вызова API через перехватчикJavascript

Форум по Javascript
Ответить Пред. темаСлед. тема
Anonymous
 Как отправить то же действие внутри перехватчика Axios после создания нового вызова API через перехватчик

Сообщение Anonymous »

Я использую перехватчики запросов и ответов.
Перехватчик запросов — он используется для помещения токена доступа в заголовок авторизации для каждого запроса.
Перехват ответа — он используется для проверки того, был ли ответ «Неавторизованный» с кодом состояния 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Javascript»