带有flask-seasurf的Ajax调用

问题描述 投票:0回答:1

我正在localhost上开发一个小型应用程序,并使用flask-seasurf来防止csrf攻击。我所有的非ajax表单均可与flask-seasurf一起正常使用。我有一种表单在表单提交时触发对'/ checkajax'的ajax调用;这一直有效,直到我开始使用flask-seasurf,但现在出现控制台错误,而ajax不起作用:

Warning in flask_seasurf: Forbidden (CSRF token missing or incorrect): /checkajax 

触发ajax调用的表单具有标准的隐藏字段,其中包含嵌入在jinja页面模板中的flask-seasurf的'csrf_token()'函数调用:

<input id="csrf-token" type="hidden" name="_csrf_token" value="{{ csrf_token() }}">

ajax调用结构是:

$("#submit").submit(function(event) {
    event.preventDefault();
    $.ajax({
        url: "/checkajax",
        data: {...},
        type: "POST",
        datatype: "text",
        success: function(response){
            ...
        },
        error: function(response) {
            ...
        }
    });
});

我从站点cookie中看到,有flask-seasurf生成的'_csrf_token'条目。任何人都可以就为何此ajax调用现在无法正常工作提供一些见解吗?

ajax flask csrf
1个回答
0
投票

我的问题的解决方案是修改ajax调用的标头,以包括定义为flask-seasurf令牌的X-CSRFToken:

var csrf_token = $("csrf-token").val()

$("#submit").submit(function(event) {
    event.preventDefault();
    $.ajax({
        headers: {"X-CSRFToken", csrf_token},
        url: "/checkajax",
        data: {...},
        type: "POST",
        datatype: "text",
        success: function(response){
            ...
        },
        error: function(response) {
            ...
        }
    });
});

希望对别人有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.