0

我在不同的端点托管了一个 Django 应用程序和一个 Angular JS 应用程序。显然,为了让 XHR 请求工作,我需要在 Angular 中设置 csrf 令牌,当 Angular 由 Django 提供服务时,这很容易做到,但在独立时就不那么容易了。

到目前为止,这是我的代码:

angular.module('App', [
    'ngCookies',
])
.run(['$rootScope', '$http', '$cookies', 
    function($rootScope, $http, $cookies){
        // Set the CSRF header token to match Django
        $http.defaults.headers.post['X-CSRFToken'] = $cookies['csrftoken'];

        // Bootstrap
        $http.get('http://127.0.0.1:8000/test/').success(function(resp){
            console.log($cookies['csrftoken']);
        });
    }
])

似乎 $cookies['csrftoken'] 始终未定义,我假设我必须以某种方式检索它,但找不到任何有关此过程如何工作的资源。

谁能指出我正确的方向?

4

2 回答 2

2

cookie 只能在同一个来源访问,因此从另一个域访问不会通过 cookie 共享 CSRF Token,您将不得不找到另一种方法来引入 cookie(例如使用 Django 的模板标签)。

其次,您的示例看起来像是试图从$http.get()调用中读取 Cookie。该$cookie服务从文档加载(存储document.cookie)时收集 Cookie,并且无法从 Ajax/XHR 跨域调用访问生成的 cookie。

于 2013-10-30T06:05:37.900 回答
0

你可以使用这个:

app = angular.module("App", []);

app.run(function($http) {
    $http.defaults.headers.post['X-CSRFToken'] = $.cookie('csrftoken');
});

jQuery Cookie 插件$.cookie来自哪里。

于 2013-10-29T13:46:24.970 回答