2016-06-10 60 views
1

我目前在家中的計算機上運行了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,但是,我仍然不確定如何訪問該值。

任何輸入,將不勝感激。

回答

0

我知道這是舊的,但我會回答無論如何,因爲我有同樣的問題。您實際上沒有正確使用$ cookie,它是$ cookie.get(「csrftoken」);不是$ cookie.csrftoken