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

如何用Axios从响应头获取Authorization Bearer Token并存入Redux Store

解决响应头Bearer Token获取不到(undefined)的问题

可能的原因及解决办法

1. 响应头键名大小写问题

Axios在处理响应头时,会自动将键名转为小写,你尝试用response.headers['Authorization']可能拿不到数据,改成小写的authorization即可:

const token = response.headers['authorization'];

2. 跨域场景下的CORS暴露头限制

如果前端和后端属于跨域部署,浏览器默认仅允许前端获取Cache-Control、Content-Language、Content-Type等少数响应头。要读取Authorization头,后端必须在响应中添加Access-Control-Expose-Headers字段,明确允许暴露该头:
以Node.js/Express后端为例,需要添加如下代码:

res.header('Access-Control-Expose-Headers', 'Authorization');

配置后前端才能正常读取到该响应头。

确认Token获取后的Redux存储逻辑

成功拿到Token后,需确保Redux的action和reducer逻辑正确:
示例action creator:

export const userToken = (token) => ({
  type: 'SET_USER_TOKEN',
  payload: token
});

对应reducer:

const initialState = {
  token: null
};

export const authReducer = (state = initialState, action) => {
  switch(action.type) {
    case 'SET_USER_TOKEN':
      return { ...state, token: action.payload };
    default:
      return state;
  }
};

完整修正后的登录代码示例

const onLogin = async () => {
  try {
    const response = await axiosInstance.post('/api/auth/login', userData);
    // 使用小写的authorization键名
    const token = response.headers['authorization'];
    if (token) {
      // 若Token格式为Bearer xxx,提取纯Token内容
      const pureToken = token.replace('Bearer ', '');
      dispatch(userToken(pureToken));
      push('/');
    } else {
      console.log('未在响应头中找到Token');
    }
  } catch (error: any) {
    console.log('Login Error', error.message);
  }
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 04:42:07