CSRF令牌在不同的浏览器中刷新

时间:2016-01-24 19:28:21

标签: javascript ajax django django-csrf wagtail

我对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令牌是相同的,在其他浏览器中它会改变。

有人可以帮忙吗?

0 个答案:

没有答案