Django + React + Redux Axios конфликт заголовков экземпляров?
У меня все мои представления на основе функций на django защищены @permission_classes([IsAuthenticated]), поэтому я должен отправлять JWT как токен Bearer при каждом запросе.
В первой версии я использовал следующий код:
import axios from 'axios';
import { decodeUserJWT } from '../../extras'
const user = JSON.parse(localStorage.getItem("user"));
var decoded = decodeUserJWT(user.access);
var user_id = decoded.user_id
const instance = axios.create({
baseURL: 'http://localhost:8000/api',
headers: {Authorization: 'Bearer ' + user.access},
params: {userAuth: user_id}
});
export default instance;
Все работало нормально.
Но затем я добавил перехватчики, чтобы обработать процесс refreshToken:
const setup = (store) => {
axiosInstance.interceptors.request.use(
(config) => {
const token = TokenService.getLocalAccessToken();
if (token) {
// const uid = await decodeUserJWT(token);
config.headers["Authorization"] = 'Bearer ' + token;
// config.headers["userAuth"] = uid;
}
return config;
},
(error) => {
return Promise.reject(error);
}
);
const { dispatch } = store;
axiosInstance.interceptors.response.use(
(res) => {
return res;
},
async (err) => {
const originalConfig = err.config;
if (originalConfig.url !== "/auth/token/obtain/" && err.response) {
console.log("TOKEN INTERCEPTOR");
// Access Token was expired
if (err.response.status === 401 && !originalConfig._retry) {
originalConfig._retry = true;
try {
const rs = await axiosInstance.post("/auth/token/refresh/", {
refresh: TokenService.getLocalRefreshToken(),
});
const { access } = rs.data;
dispatch(refreshToken(access));
TokenService.updateLocalAccessToken(access);
return axiosInstance(originalConfig);
} catch (_error) {
return Promise.reject(_error);
}
}
}
return Promise.reject(err);
}
);
};
Что происходит?
Когда я добавляю строку config.headers["userAuth"] = uid;, консоль сервера django начинает показывать, что когда приложение react пытается получить доступ к маршрутам, оно получает Not Authorized, а когда я убираю эту строку из кода... все работает нормально.
Я также пробовал передать параметр userAuth в axios.create и оставить только конфиг Bearer внутри кода интерсектора, но все еще нет положительного результата, код с кодом интерсектора работает только когда я убираю строку userAuth из axios.
Есть идеи, почему это происходит и как я могу это исправить?