ReactJS调用API出现“Authentication credentials were not provided”错误求排查
问题排查与修复方案
核心问题:Axios GET方法参数顺序错误
Axios的get方法签名为axios.get(url[, config]),你当前将data作为第二个参数传入,导致包含Authorization头的config未被正确识别,请求头根本没带上Token,这就是后端返回"Authentication credentials were not provided"的直接原因。
另外需要注意:GET请求规范上不会在请求体中传递数据,若后端接口要求传参,要么将参数转为URL查询参数,要么改用POST请求。
修复后的代码方案
方案1:改用POST请求(适配接受POST传参的后端接口)
import axios from '../axios/axios.js'; import { getAuthenticationToken } from '../utils.js'; export const duplicateAssessment = async (data) => { const token = getAuthenticationToken(); console.log('token', token); const config = { headers: { Authorization: `Bearer ${token}`, }, }; // POST方法支持url、请求体、配置参数的顺序 return axios.post('/assessment/duplicate_assessment/', data, config); };
方案2:保留GET请求,将data转为URL查询参数
import axios from '../axios/axios.js'; import { getAuthenticationToken } from '../utils.js'; export const duplicateAssessment = async (data) => { const token = getAuthenticationToken(); console.log('token', token); const config = { headers: { Authorization: `Bearer ${token}`, }, params: data // 将data转为URL查询参数 }; // GET方法仅传递url和配置参数 return axios.get('/assessment/duplicate_assessment/', config); };
额外排查点
- 确认
getAuthenticationToken()返回的Token有效,检查控制台输出的token是否为空、格式错误(比如多余空格) - 验证后端接口的认证头格式要求,部分后端可能不需要
Bearer前缀,或使用其他认证标识 - 检查Axios实例(
../axios/axios.js)是否存在全局拦截器,是否会覆盖或清空自定义的Authorization头
内容的提问来源于stack exchange,提问作者Haroon Hayat
相关产品推荐
相关产品推荐

