我目前在家中的計算機上運行了Django Rest Framework後端,以及在不同的ips
上的AngularJS前端。當我向rest-auth/login
發出請求時,它會返回帶有會話ID的Set-Cookie標頭,並且csrftoken僅爲而非爲true。AngularJS + Django Rest框架 - X-CSRFToken沒有設置爲標題
Set-Cookie:csrftoken=SOMECSRFTOKENHERE; expires=Fri, 09-Jun-2017 01:25:16 GMT; Max-Age=31449600; Path=/
在任何後續post請求,或者get請求,我發現我有一個名爲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,但是,我仍然不確定如何訪問該值。
任何輸入,將不勝感激。