繁体   English   中英

Django CSRF 验证在使用 Ajax 登录后表单验证失败

[英]Django CSRF verification failed on form validation after login with Ajax

我的上下文,我填写表格,如果我登录,我可以将值保存在数据库中。

当我单击登录按钮时,我打开一个引导模式表单进行登录,并使用 Ajax/Jquery 进行登录过程。

我知道登录后 CSRF 令牌会更改,这就是为什么当我验证我的表单 (POST) 时,我收到消息:“禁止 (403) CSRF 验证失败。请求中止。” 因为我没有刷新我的页面。

我想不通的是,如何在不丢失我已经填写在表格中的所有数据的情况下刷新这个令牌?

首先将{% csrf_token %}添加到 html 正文中的模板然后获取变量中的csrf_token值并将其传递给 ajax 请求,如下所示

<script type="text/javascript">

function csrfSafeMethod(method) {
    // these HTTP methods do not require CSRF protection
    return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
}
$.ajaxSetup({
    beforeSend: function(xhr, settings) {
        if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
            xhr.setRequestHeader("X-CSRFToken", csrftoken);
        }
    }
});
</script>

并在 js 中的变量中获取csrf_token

<script type="text/javascript">
// using jQuery
var csrftoken = jQuery("[name=csrfmiddlewaretoken]").val();
</script>

有关更多信息,请关注https://docs.djangoproject.com/en/2.2/ref/csrf/#setting-the-token-on-the-ajax-request

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM