У меня проблема с сообщениями ajax на моем сайте электронной коммерции django после входа в систему.Сценарий сбоя выглядит следующим образом:
1-) Пользователь заходит на сайт и без проблем добавляет товары в корзину.Добавление товара в корзину - вызов ajax, код которого следующий:
function addItemToCart(item_pk, quantity) {
var item_quantity;
if (!quantity) {
item_quantity = 1;
} else {
item_quantity = quantity;
}
$.ajaxSetup({
beforeSend: function(xhr) {
xhr.setRequestHeader('Csrf-Token', csrftoken);
}
});
$.ajax({
type: 'POST',
url: '/api/cart/add-item/',
data: {
item: item_pk,
quantity: item_quantity
}
success: function(data, textStatus, jQxhr) {
updateCart();
},
error: function(jqXhr, textStatus, errorThrown) {
console.log(jqXhr, textStatus, errorThrown);
}
});
}
Приведенный выше код работает отлично, и пользователь может добавить несколько товаров в корзину.
2-) После этого пользователь заходит на сайт, чтобы совершить платеж, но перед тем, как совершить платеж, он хотел добавить другой продукт в корзину, но код не работает.
3-) Сообщение об ошибке выглядит следующим образом: «CSRF Failed: токен CSRF отсутствует или неверен».
Когда я проверил запрос, я вижу, что вызов ajax уже установил токен csrf.Единственное, что я понял, это то, что django обновил токен после входа пользователя.Но я также позаботился о том, чтобы при вызове ajax был установлен заголовок csrf с новым.
Итак, я запутался, почему он работает до входа пользователя и не работает после входа пользователя.Потому что оба сообщения сделаны с правильными токенами csrf.
Есть идеи о том, что мне не хватает?