AngularJS + Django Rest Framework - X-CSRFToken未设置为标头

时间:2016-06-10 01:36:54

标签: angularjs django rest cookies django-rest-framework

我目前在家中的计算机上运行Django Rest Framework后端,并在不同的ips上运行AngularJS前端。当我向rest-auth/login发出请求时,它返回一个带有会话ID的Set-Cookie标头和一个csrftoken,http仅为真。

Set-Cookie:csrftoken=SOMECSRFTOKENHERE; expires=Fri, 09-Jun-2017 01:25:16 GMT; Max-Age=31449600; Path=/

在任何后续帖子请求或获取请求时,我注意到我有一个名为Cookie的标题,如下所示:

csrftoken=SOMECSRFTOKENHERE; sessionid=SOMESESSIONIDHERE

并从服务器获取此响应: CSRF Failed: CSRF token missing or incorrect

withCredentials设置为true时,似乎就是这种情况。

我注意到当我运行console.log($cookies.csrftoken)时,它会记录未定义。我知道根据xsrf标头的角度文档:不会为跨域请求设置标头。但是,cookie没有被存储,但是,它是作为请求发送的cookie,我无法访问。

我如何获得对它的访问权限?无论如何我可以使用X-CSRFToken标头来进行跨域请求吗?

我已经查看过这里的其他帖子,并且找不到有效的解决方案。

当前配置:

.config(['$httpProvider', function($httpProvider) {
    $httpProvider.defaults.withCredentials = true;
    $httpProvider.defaults.xsrfCookieName = 'csrftoken';
    $httpProvider.defaults.xsrfHeaderName = 'X-CSRFToken';
}]);

更新

我添加了一个拦截器来添加x-csrftoken标头;但是,我仍然无法访问Cookie csrftoken

.factory('csrfInterceptor',['$cookies', function($cookies){
    var csrfInterceptor =  {
        request: function(config) {
            if(config.method == 'POST'){
                //config.headers['X-CSRFToken'] = $cookies.csrftoken;
            }
            return config;
        }
    };
    return csrfInterceptor;
}])

$cookies.csrftoken的值仍然返回undefined,但是,我仍然不确定如何访问该值。

任何意见都会受到赞赏。

1 个答案:

答案 0 :(得分:0)

我知道这已经过时但我会回答,因为我遇到了同样的问题。你实际上没有正确使用$ cookie它是$ cookie.get(“csrftoken”);不是$ cookie.csrftoken

相关问题