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

如何将Context API获取的Bearer Token传入useEffect中的Axios请求?

解决Axios请求401错误:正确传递Bearer Token的方法

你的代码存在几个关键问题,导致Token未正确传递引发401未授权错误,以下是具体修正方案:

1. 修正Axios请求的headers字段拼写

Axios的请求配置中,请求头对应的字段是**headers**(复数形式),你写的header(单数)不会被Axios识别,Token自然无法被添加到请求头里。

2. 给useEffect添加正确的依赖项

你的useEffect依赖数组为空,当管理员登录后Token更新时,这个副作用不会重新执行,依然会用初始的空Token发送请求。需要把token加入依赖数组,确保Token变化时自动重新发起请求。

3. 增加Token非空判断

避免在Token尚未获取到的情况下发送无效请求,减少不必要的401错误。

修改后的完整代码

// React
import React, { useContext, useState, useEffect } from "react";

// Axios
import Axios from "axios";

// Contexts
import { LoginDataContext } from "../Contexts/LoginContext";
import { TokenDataContext } from "../Contexts/TokenContext";
import { UserIdDataContext } from "../Contexts/UserIdContext";

// Icons
import { HiArrowNarrowUp, HiArrowNarrowDown} from "react-icons/hi";

const AdminDashboard = () => {
  const { user } = useContext(LoginDataContext);
  const { token } = useContext(TokenDataContext);
  const { userid } = useContext(UserIdDataContext);

  const [Subscriber, SetSubscriber] = useState([]);

  useEffect(() => {
    // Token为空时不发送请求
    if (!token) return;

    Axios.get(`http://localhost:4000/api/v1/subscribers`, {
      // 正确使用headers字段传递授权令牌
      headers: {
        'Authorization': `Bearer ${token}`
      }
    })
    .then((res) => {
      console.log(res.data);
      SetSubscriber(res.data);
    })
    .catch(err => {
      // 捕获错误便于调试具体原因
      console.error('请求失败:', err.response?.data || err.message);
    });
  }, [token]); // 依赖token,Token更新时自动重新执行

  // 组件其他逻辑...
};

额外优化建议

可以全局配置Axios的默认请求头,避免每个请求重复编写Authorization字段:

// 在项目入口文件或单独的Axios配置文件中
import Axios from 'axios';

// 设置全局默认接口前缀
Axios.defaults.baseURL = 'http://localhost:4000/api/v1';

// 封装Token更新方法
export const setAuthToken = (token) => {
  if (token) {
    Axios.defaults.headers.common['Authorization'] = `Bearer ${token}`;
  } else {
    delete Axios.defaults.headers.common['Authorization'];
  }
};

后续在管理员登录成功后调用setAuthToken(token),所有Axios请求都会自动带上Token,无需每次手动配置请求头。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 10:56:06