django前后端分离模式的csrf报错403:CSRF cookie not set

探讨了在Django框架中使用CSRFR中间件时,前端通过Ajax发送非GET请求时遇到的CSRFcooki错误。分析了错误原因并提供了解决方案,包括后端设置CSRFtoken、前端获取并传递CSRFtoken。

问题描述:使用django开启csrf中间件,前端使用ajax的方式,请求使用除’GET’, ‘HEAD’, ‘OPTIONS’, 'TRACE’时,报错CSRF cookie not set

问题分析:
因为如果开启了csrf功能,前端除了’GET’, ‘HEAD’, ‘OPTIONS’, 'TRACE’请求提交数据时,都需要校验csrftoken,因为前端在请求时没有传csrftoken到后端,所以就会报错

解决办法:
1、先确认后端是否有设置cookie的csrftoken值
判断request.META.get(“CSRF_COOKIE_USED”):如果为ture则设置,如果为false则不设置
2、手动添加设置csrftoken值
在csrf中间件在执行process_response之前,需要设置CSRF_COOKIE_USED为True
调用from django.middleware.csrf的get_token()方法,可以设置CSRF_COOKIE_USED为True
3、前端在请求时,需要获取cookie中的csrftoken值,放到请求头参数中,传给后端

# 获取cookie中的参数值
function getCookie(name) {
    var r = document.cookie.match("\\b" + name + "=([^;]*)\\b");
    return r ? r[1] : undefined;
}
# 请求头格式
headers: {
    'X-CSRFToken': getCookie('csrftoken')
},
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值