ajax POST 中的 Django csrf(直到使用 {{csrf}} 才设置 csrf cookie)
Django csrf in ajax POST (csrf cookie not set until {{csrf}} used)
我的 Django 应用程序使用 ajax 将商品添加到购物车。 ajax请求方法是POST,我通过js启用请求头:
var csrftoken = getCookie('csrftoken');
$.ajaxSetup({
beforeSend: function (xhr, settings) {
if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
xhr.setRequestHeader("X-CSRFToken", csrftoken);
}
}
});
问题是,我不是从表单发送请求,而是仅使用按钮和 onClick 事件,所以我没有在模板中使用 {{ csrf }}。因此,在我访问另一个页面(例如,登录页面)之前,不会设置 cookie。我应该使用表格(这不是一个好主意,因为我在一页上有很多项目,并且为每个项目创建了带有 csrf 令牌的表格),或者有一种方法可以手动设置 csrf cookie,如果不是的话放?谢谢
如果尚未设置 cookie,您可以随时将 {% csrf_token %}
隐藏的表单域放在模板中的任何位置,然后按名称选取它。您不必将它放在表单标签内才有效 HTML.
只需将您的逻辑更改为:
var csrftoken == getCookie('csrftoken') || $(":input[name='csrfmiddlewaretoken']").val();
那当然要看getCookie
returns.
我的 Django 应用程序使用 ajax 将商品添加到购物车。 ajax请求方法是POST,我通过js启用请求头:
var csrftoken = getCookie('csrftoken');
$.ajaxSetup({
beforeSend: function (xhr, settings) {
if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
xhr.setRequestHeader("X-CSRFToken", csrftoken);
}
}
});
问题是,我不是从表单发送请求,而是仅使用按钮和 onClick 事件,所以我没有在模板中使用 {{ csrf }}。因此,在我访问另一个页面(例如,登录页面)之前,不会设置 cookie。我应该使用表格(这不是一个好主意,因为我在一页上有很多项目,并且为每个项目创建了带有 csrf 令牌的表格),或者有一种方法可以手动设置 csrf cookie,如果不是的话放?谢谢
如果尚未设置 cookie,您可以随时将 {% csrf_token %}
隐藏的表单域放在模板中的任何位置,然后按名称选取它。您不必将它放在表单标签内才有效 HTML.
只需将您的逻辑更改为:
var csrftoken == getCookie('csrftoken') || $(":input[name='csrfmiddlewaretoken']").val();
那当然要看getCookie
returns.