2

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

有人可以帮忙吗?

4

0 回答 0