使用Django csrf令牌填充cookie

时间:2014-01-23 21:51:25

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

我需要了解一些事情。

我在服务器A(django-rest-framework)上有一个休息服务器。服务器B上的应用程序(angularjs)请求其余服务器。 我想添加身份验证。每次我请求h ttp://serverA/api-auth/login/时,它返回403,因为我没有传递csrf令牌。

所以,在我的app.js中,我添加了:

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

现在,很好,我可以发送csrf令牌。 我的问题是,我如何填充cookie?在发布之前我是否必须使用get()来获取令牌?因为目前我的cookie是空的:(

谢谢

2 个答案:

答案 0 :(得分:1)

如果您不共享同一个域,则无法使用SessionAuthentication方法。在您的情况下,OAuth2Authentication是可行的方法。

答案 1 :(得分:0)

假设你的angularjs代码使用jquery ajax发布,你可以将csrf标记放入元标记

<!--<meta name="csrf-token" content="{{csrf_token}}">-->

然后设置jquery ajax方法以包含csrf标记。

jQuery(document).ajaxSend(function(event, xhr, settings) {
    if (!(/^http:.*/.test(settings.url) || /^https:.*/.test(settings.url))) {
        //var token = $('meta[name="csrf-token"]').attr('content');
        var csrftoken = $.cookie('csrftoken');
        xhr.setRequestHeader("X-CSRFToken", csrftoken);
    }..............
});