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

axios发送POST请求无法传递auth token报422错误问题求助

问题原因

你的报错是客户端axios.post传参顺序错误导致的。
axios.post的方法签名固定为 axios.post(url[, requestData[, requestConfig]]):

  • 第一个参数是接口地址
  • 第二个参数是POST请求要发送的请求体数据
  • 第三个参数才是包含请求头、超时时间等配置的config对象

你当前的代码把存放headers的配置对象放在了第二个参数位置,这个对象会被axios当成请求体发送,根本不会被解析为请求配置,所以实际发出去的请求根本没有携带Authorization头,服务端校验不通过就返回了Please provide the token的422响应。
这也能解释为什么Postman请求可以成功:你在Postman里是把token放在专门的请求头配置项里传递的,参数位置符合服务端的读取规则。

修复方法

调整参数位置即可:如果这个接口不需要传递请求体内容,第二个参数传null,把带headers的配置放到第三个参数位置:

finally{
  // 第二个参数传null代表无请求体,第三个参数才是请求配置
  const auth = await axios.post(`/api/get-user`, null, {
    headers: {
      Authorization: `Bearer ${this.Token}` 
    }
  })
}
可选优化建议
  • 项目中如果有多个接口需要携带token鉴权,不建议每次请求手动写headers配置,可以给axios配置全局请求拦截器,自动给所有需要鉴权的请求注入Authorization头,避免重复代码和传参错误:
// 你的axios全局/实例配置
axios.defaults.baseURL = 'http://localhost:3001' // 你已配置的baseURL
// 请求拦截器统一注入token
axios.interceptors.request.use((config) => {
  const token = this.Token // 替换为你实际存储token的变量/本地存储取值逻辑
  if (token) {
    config.headers.Authorization = `Bearer ${token}`
  }
  return config
})

配置完成后,后续请求不需要再手动写headers,直接调用axios.post('/api/get-user')即可自动携带token。

  • 你当前服务端的jwt校验逻辑缺少异常捕获,当token伪造、过期时,jwt.verify会直接抛出未捕获异常导致接口返回500错误,建议补充try/catch处理,校验失败时返回401状态码,这个和你当前遇到的422问题无关,可以后续迭代优化。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 16:54:36