weixin_33743661 2020-01-09 15:25 采纳率: 0%
浏览 102

Ajax带烧瓶-seasurf调用

I am developing a small app on localhost and using flask-seasurf to prevent csrf attacks. All my non-ajax forms work correctly with flask-seasurf. I have one form that triggers an ajax call to '/checkajax' on form submit; this worked until I started to use flask-seasurf but now I get a console error and the ajax doesn't work:

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

The form triggering the ajax call has the standard hidden field containing the 'csrf_token()' function call of flask-seasurf embedded in the jinja page template:

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

The ajax call structure is:

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

I can see from the site cookie that there is an entry for '_csrf_token' generated by flask-seasurf. Can anyone give some insight as to why this ajax call is now not working?

  • 写回答

1条回答 默认 最新

  • 程序go 2020-01-09 16:53
    关注

    The solution to my problem was to modify the header of the ajax call to include X-CSRFToken defined as the flask-seasurf token from my form:

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

    Hope that helps someone else.

    评论

报告相同问题?

悬赏问题

  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵