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
相关产品推荐
相关产品推荐

