我目前在家中的计算机上运行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,但是,我仍然不确定如何访问该值。
任何意见都会受到赞赏。
答案 0 :(得分:0)
我知道这已经过时但我会回答,因为我遇到了同样的问题。你实际上没有正确使用$ cookie它是$ cookie.get(“csrftoken”);不是$ cookie.csrftoken