在这种情况下,Django告诉我我的CRSF令牌不再有效。
CSRF令牌丢失或不正确
我想这是因为session_id已经发生了变化或者类似的事情。
我的说法正确吗?
如何允许用户重新提交表单而不必重新加载页面?
发布于 2014-04-16 10:16:56
虽然上面的方法可以用于AJAX POST请求,但它有一些不便之处:您必须记住将CSRF令牌作为POST数据与每个POST请求一起传递。因此,有另一种方法:在每个XMLHttpRequest上,将一个定制的alternative报头设置为CSRF令牌的值。这通常更容易,因为许多javascript框架提供了允许在每个请求上设置头的挂钩。
您需要通过AJAX调用发送CSRF令牌:
$.ajaxSetup({
beforeSend: function(xhr, settings) {
function getCookie(name) {
var cookieValue = null;
if (document.cookie && document.cookie != '') {
var cookies = document.cookie.split(';');
for (var i = 0; i < cookies.length; i++) {
var cookie = jQuery.trim(cookies[i]);
// Does this cookie string begin with the name we want?
if (cookie.substring(0, name.length + 1) == (name + '=')) {
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
break;
}
}
}
return cookieValue;
}
if (!(/^http:.*/.test(settings.url) || /^https:.*/.test(settings.url))) {
// Only send the token to relative URLs i.e. locally.
xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken'));
}
}
});这是参考链接,https://docs.djangoproject.com/en/1.6/ref/contrib/csrf/#ajax
https://stackoverflow.com/questions/23106056
复制相似问题