我对 django 和 web 开发几乎是新手,所以遇到了 csrf 令牌的问题
先决条件:基于 wagtail 的网站和不同域上的 django rest api
在网站上,我有一个登录表单(包括{% csrf_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 令牌是相同的,而在其他浏览器中它会发生变化。
有人可以帮忙吗?