Ошибка проверки CSRF в Django при проверке формы после входа в систему с помощью Ajax - PullRequest
0 голосов
/ 09 ноября 2019

Мой контекст, я заполняю свою форму, у меня есть возможность сохранить значения в базе данных, если я вхожу в систему.

Когда я нажимаю кнопку «Вход в систему», я открываю модальную форму начальной загрузки длявойдите в систему и я использую Ajax / Jquery для процесса входа в систему.

Я понял, что токен CSRF меняется после входа в систему, поэтому при проверке формы (POST) у меня появляется сообщение: «Запрещено (403»). ) Ошибка проверки CSRF. Запрос отменен. "потому что я не обновил свою страницу.

Что я не могу понять, как я могу обновить этот токен, не теряя все данные, которые я уже заполнил в моей форме?

1 Ответ

0 голосов
/ 09 ноября 2019

Сначала добавьте {% csrf_token %} к вашему шаблону в html теле. Затем получите значение csrf_token в переменной и передайте его в ajax-запрос, подобный этому

<script type="text/javascript">

function csrfSafeMethod(method) {
    // these HTTP methods do not require CSRF protection
    return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
}
$.ajaxSetup({
    beforeSend: function(xhr, settings) {
        if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
            xhr.setRequestHeader("X-CSRFToken", csrftoken);
        }
    }
});
</script>

И получите csrf_token в переменнойв js

<script type="text/javascript">
// using jQuery
var csrftoken = jQuery("[name=csrfmiddlewaretoken]").val();
</script>

Для более подробной информации следуйте https://docs.djangoproject.com/en/2.2/ref/csrf/#setting-the-token-on-the-ajax-request

...