Django+Vue项目POST请求持续返回403「CSRF token缺失或错误」求解
解决方案
你遇到的CSRF校验失败核心问题出在CSRF_HEADER_NAME的配置格式错误。Django要求自定义CSRF请求头配置必须遵循HTTP_前缀、全大写、横杠转下划线的规则:
- 你当前配置的
CSRF_HEADER_NAME = "X-CSRFToken"是无效写法,Django不会从X-CSRFToken请求头中读取token - 直接删除这行配置即可,Django默认的
CSRF_HEADER_NAME值为HTTP_X_CSRFTOKEN,会自动匹配前端发送的X-CSRFToken请求头,无需额外自定义。如果要显式声明,正确写法为CSRF_HEADER_NAME = "HTTP_X_CSRFTOKEN"
其他需要校验的排查点
- 如果你使用Django 4.0及以上版本,必须配置
CSRF_TRUSTED_ORIGINS参数,将前端服务的访问地址(例如本地测试的http://127.0.0.1:5173、http://localhost:5173)加入列表,否则即使头信息完全正确也会触发403 - 跨域部署场景下需要额外配置
CSRF_COOKIE_DOMAIN为前后端共用的根域名,保证前端可以正常读取csrftoken Cookie - 排查阶段可以临时给POST接口添加
@csrf_exempt装饰器,如果添加后接口可以正常访问,即可确认问题完全由CSRF校验导致,排除权限错误、路由不匹配等其他403诱因
调试CSRF校验逻辑的方法
找到你本地Django安装路径下的django/middleware/csrf.py文件,定位到_check_token方法,添加临时打印日志输出Django实际获取到的请求头token、Cookie存储的token以及校验失败的具体原因,排查完成后回滚修改即可。
内容的提问来源于stack exchange,提问作者theberzi
相关产品推荐
相关产品推荐

