我正在尝试在用户登录时添加身份验证标头。我能够更新基本axios实例,但无法更新settingsApi
等自定义实例。
import baseAxios from "axios";
import {csrfToken} from "../helpers";
baseAxios.defaults.headers.common['X-CSRF-TOKEN'] = csrfToken();
baseAxios.defaults.headers.common['X-Requested-With'] = "XMLHttpRequest";
export const setAuthToken = token => {
baseAxios.defaults.headers.common["Authorization"] = "Bearer " + token
};
export const settingsApi = baseAxios.create({
baseURL: "/api/settings"
});
...
setAuthToken
仅更新baseAxios,它对首先初始化的自定义实例无效。为了使其正常工作,我必须分别向所有自定义实例添加auth标头,是否有任何优雅的方法来实现这一目标?
答案 0 :(得分:0)
因为settingsApi
实例是在导入助手模块时第一次创建的。当时,没有调用setAuthToken
函数,则baseAxios
没有Authorization
头。
我的建议是,使settingsApi
为一个函数,然后每次需要使用settingsApi
时,它将返回一个由“最新” baseAxios
创建的实例。 >
import baseAxios from "axios";
import {csrfToken} from "../helpers";
baseAxios.defaults.headers.common['X-CSRF-TOKEN'] = csrfToken();
baseAxios.defaults.headers.common['X-Requested-With'] = "XMLHttpRequest";
export const setAuthToken = token => {
baseAxios.defaults.headers.common["Authorization"] = "Bearer " + token
};
// Make it to be a function
export const getSettingsApi = () => baseAxios.create({
baseURL: "/api/settings"
});
// ...