Javascript 不同浏览器中的CSRF令牌刷新
我几乎是django和web开发的新手,因此面临csrf令牌的问题 先决条件:不同域上基于wagtail的网站和django rest api 我在网站上有一个登录表单(包括Javascript 不同浏览器中的CSRF令牌刷新,javascript,ajax,django,django-csrf,wagtail,Javascript,Ajax,Django,Django Csrf,Wagtail,我几乎是django和web开发的新手,因此面临csrf令牌的问题 先决条件:不同域上基于wagtail的网站和django rest api 我在网站上有一个登录表单(包括{%csrf\u token%}) 提交时的js脚本: function getToken(){ document.cookie = "path=/; csrftoken = {% csrf_token %}"; var xhr = new XMLHttpRequest();
{%csrf\u token%}
)
提交时的js脚本:
function getToken(){
document.cookie = "path=/; csrftoken = {% csrf_token %}";
var xhr = new XMLHttpRequest();
xhr.open('POST', url, false);
xhr.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
xhr.setRequestHeader("X-CSRFToken", $.cookie('csrftoken'));
xhr.send(JSON.stringify({"username":document.getElementById("login").value,
"password":document.getElementById("password").value}));
if (xhr.status != 200) {
alert( "ERR" );
}
else {
alert( xhr.responseText );
document.cookie = "token = " + JSON.parse(xhr.responseText).key;
}
}
在chrome中,一切都很好,但在IE和Opera中,成功登录后,它们会显示给我
403: CSRF verification failed. Request aborted.
当我在IE和Opera中刷新页面后,一切正常,我看到我的登录用户
我还注意到:登录前和登录后csrf令牌是相同的,在其他浏览器中它会发生变化
有人能帮忙吗?我不清楚,您是否正在尝试从一个域的表单向另一个域提交信息?假设您是,请查看此处的CORS部分: