我对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令牌是相同的,在其他浏览器中它会改变。
有人可以帮忙吗?