Ajax带烧瓶-seasurf调用

时间:2020-01-09 15:25:40

标签: ajax flask csrf

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

(?!0+\b)

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

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

ajax调用结构为:

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

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

1 个答案:

答案 0 :(得分: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) {
            ...
        }
    });
});

希望对别人有帮助。