Axios-如何将默认标头添加到所有自定义axios实例?

时间:2019-11-28 09:18:03

标签: javascript axios

我正在尝试在用户登录时添加身份验证标头。我能够更新基本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标头,是否有任何优雅的方法来实现这一目标?

1 个答案:

答案 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"
});

// ...