You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Axios默认Authorization Token无法全局设置问题求助

问题原因及修复方案

可能的问题点

  • Token格式不匹配后端要求
    绝大多数后端的Authorization请求头要求Bearer {token}格式,但你直接将res.token传入setAuthHeader,如果后端需要前缀,会导致请求头的Authorization值不合法,看起来像是未生效。

  • 登录接口返回的Token路径错误
    看你的UseHttp函数,连续两次提取data:

    .then((response) => {
        if (response.status == 200) {
            return response.data;
        } else {
            throw new Error(response.data.message);
        }
    }).then((data) => {
        return data.data;
    })
    

    这意味着登录接口必须返回{data: {token: 'xxx', ...}}这种嵌套结构才能拿到Token。如果登录接口返回的是{token: 'xxx', ...},res.token会是undefined,导致setAuthHeader设置空值,请求头自然没有Authorization字段。

  • 请求执行顺序问题
    如果countryList在登录完成、Token设置前就被调用(比如组件挂载时直接执行,未判断登录状态),此时Token还未初始化,请求自然不带Authorization。


对应修复步骤

1. 修正Authorization格式

修改setAuthHeader函数,添加后端要求的前缀(通常是Bearer ,请确认后端文档):

export const setAuthHeader = (token) => {
    axiosClient.defaults.headers.common['Authorization'] = `Bearer ${token}`;
}

2. 调整Token的获取逻辑

根据登录接口的实际返回结构修改UseHttp:
如果登录接口返回的是{token: 'xxx', message: 'success'}这种非嵌套结构,删掉UseHttp里多余的then:

const UseHttp = (requestConfig) => {
    return axiosClient({
        url: requestConfig.url,
        method: requestConfig.method || 'GET',
        data: requestConfig.body && JSON.stringify(requestConfig.body)
    }).then((response) => {
        if (response.status == 200) {
            return response.data;
        } else {
            throw new Error(response.data.message);
        }
    }).catch((error) => {
        return error.message;
    });
};

这样LoginApi里的res就能直接拿到登录接口返回的完整数据,res.token也能正确取值。

3. 确保请求在Token设置后执行

在调用countryList前先判断登录状态,比如:

import { countryList } from '../../../api/CountryApi';
import { getToken } from './Auth'; // 假设你有获取Token的工具函数

useEffect(() => {
    const token = getToken();
    if (token) {
        countryList().then((res) => {
            setallData(res)
        });
    }
}, [locale]) 

内容的提问来源于stack exchange,提问作者Ron

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 08:04:41