【django】Ajax Post请求CSRF认证问题

问题:Post请求CSRF认证失败

问题:使用ajax向后台发送post请求,提示CSRF验证失败,报403,原因是因为django中自带了防止CSRF攻击的功能,GET请求不需要CSRF认证,POST请求需要正确认证才能得到正确的放回结果。

Django CSRF认证中间件

Django默认是开启这个中间件的,每个POST请求是都会通过这个中间件认证。
在这里插入图片描述

1. 表单处理

如果是表单,在POST表单中直接加入{ % csrf_token% },这在POST请求时,就不会报CSRF认证错误。在表单的任何位置加入都可以

<form method="POST" action="/post-url/">
    {
   % csrf_token %}  // 加上这一句就不会提示CSRF认证错误
</form>

2. Ajax Post请求

官网原话:

当 CSRF_USE_SESSIONS 和 CSRF_COOKIE_HTTPONLY 为 False 时获取令牌,默认为False的,才能使用下面这种解决方式。

解决方式:

  1. 在每个POST请求中把CSRF作为POST数据传递进来。
  2. 在每个http请求头中,自定义的X-CSRFToken头,这个是默认名称(不要写错了)。

2.1 CSRF作为POST数据传递

在Js文件中直接复制官网提供的获取CSRF认证的代码。然后在Ajax请求中data属性中添加CSRF。

示例:

function getCookie(name) {
   
    let cookieValue = null;
    if (document.cookie && document.cookie !== '') {
   
        const cookies 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值