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

Next.js POST请求如何传递Django REST Framework授权Token并排查404错误

代码存在的核心问题
  • 参数位置传递错误:axios.post的方法签名为axios.post(url, 请求体数据, 请求配置),你把headers配置和业务字段一起塞到了第二个参数(请求体)里,最终发出去的请求根本没有在头信息里携带授权字段,同时请求体多了后端不需要的headers字段,还可能触发后端参数校验失败。
  • 授权头格式不匹配Django DRF的默认规则:Django REST Framework自带的TokenAuthentication认证方案,要求Authorization头的格式为Token <token值>,你自己定义的token变量已经带了Token 前缀,又额外套了一层Bearer 前缀,最终传的头内容是Bearer Token 8736be9d...,完全不符合后端校验规则。
  • 额外容易触发404的细节:Django默认开启APPEND_SLASH配置,如果你的后端路由是带末尾斜杠的(比如/api/contact/),前端请求不带末尾斜杠时会触发301重定向,POST请求重定向过程中方法可能被改写,最终触发404。
正确实现代码
// 仅存token本身的字符串即可,不需要提前拼接前缀
const token = "8736be9dba6ccb11208a536f3531bccc686cf88d"
await axios.post(
  url,
  // 第二个参数只传POST请求需要的业务字段
  {
    contact_name: contact_name,
    contact_email: contact_email,
    contact_body: contact_body
  },
  // 第三个参数传请求配置,headers必须放在这里
  {
    headers: {
      // 严格匹配DRF Token认证的头格式,不要加Bearer
      Authorization: `Token ${token}`,
      'Content-Type': 'application/json'
    }
  }
)
改完仍报错的排查方向
  • 核对请求url和Django侧注册的路由完全一致,注意末尾斜杠必须匹配
  • 打开浏览器开发者工具的网络面板,检查实际发出的请求:确认请求头里存在正确的Authorization字段,请求体里没有混入headers属性
  • 确认Django侧对应视图已经正确配置了authentication_classes = [TokenAuthentication]和对应的权限类,没有做路由拦截

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 23:09:41