Вот что я делал в прошлом:
Передача jwtToken каждый раз, когда вы вызываете API, я думаю, не очень хороший способ. Если вы используете следующий, вам просто нужно
const data = {
id: id
};
return userApi
.post('/user/account/unlink', data)
Кроме того, вам не нужно каждый раз вызывать refreshToken.
import axios from 'axios';
import { store } from '../index';
import { updateAuth } from '../redux/actions/auth';
import { apiURL } from '../config';
axios.defaults.baseURL = apiURL;
// Add a request interceptor
axios.interceptors.request.use(
(config) => {
const { tokenType, accessToken, loggedIn } = store.getState().auth;
const token = `${tokenType} ${accessToken}`;
if (loggedIn) {
config.headers['Authorization'] = token;
}
config.headers['Content-Type'] = 'application/json';
return config;
},
(error) => {
Promise.reject(error);
}
);
//Add a response interceptor
axios.interceptors.response.use(
(response) => {
return response;
},
function(error) {
const originalRequest = error.config;
if (
error.response.status === 401 &&
(originalRequest.url === `${apiURL}auth/login` ||
originalRequest.url === `${apiURL}auth/refresh-token`)
) {
// router.history.push('/auth/login');
return Promise.reject(error);
}
if (error.response.status === 401 && !originalRequest._retry) {
originalRequest._retry = true;
const { refreshToken } = store.getState().auth;
const { email } = store.getState().user;
return axios
.post('/auth/refresh-token', {
email,
refreshToken
})
.then((response) => {
const { data: res } = response;
if (res.code === 200) {
store.dispatch(updateAuth({ ...res.token }));
const { tokenType, accessToken } = res.token;
axios.defaults.headers.common[
'Authorization'
] = `${tokenType} ${accessToken}`;
return axios(originalRequest);
}
});
}
return Promise.reject(error);
}
);
export default axios;