Ajax вызов с flask -seasurf - PullRequest
       32

Ajax вызов с flask -seasurf

0 голосов
/ 09 января 2020

Я разрабатываю небольшое приложение на localhost и использую flask -seasurf для предотвращения атак csrf. Все мои не ajax формы работают правильно с flask -seasurf. У меня есть одна форма, которая вызывает ajax вызов '/ check ajax' при отправке формы; это работало, пока я не начал использовать flask -seasurf, но теперь я получаю ошибку консоли, и ajax не работает:

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

Форма, вызывающая вызов ajax, имеет стандартное скрытое поле, содержащее вызов функции 'csrf_token ()' flask -seasurf, встроенного в шаблон страницы jinja:

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

I с сайта cook ie видно, что есть запись для '_csrf_token', сгенерированная flask -seasurf. Кто-нибудь может дать некоторое представление о том, почему этот ajax вызов сейчас не работает?

1 Ответ

0 голосов
/ 09 января 2020

Решением моей проблемы было изменение заголовка вызова ajax, чтобы он включал в мою форму токен X-CSRFT, определенный как токен 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) {
            ...
        }
    });
});

Надеюсь, что кому-то это поможет еще.

...