Ajax 用 flask-seasurf 调用

Ajax call with flask-seasurf

我正在本地主机上开发一个小应用程序并使用 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 调用的 header 以包括 X-CSRFToken 定义为我表单中的 flask-seasurf 标记:

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) {
            ...
        }
    });
});

希望对其他人有所帮助。