【问题标题】:Populate a cookie with a Django csrf token使用 Django csrf 令牌填充 cookie
【发布时间】:2014-02-14 16:55:48
【问题描述】:

我需要了解一些东西。

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

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

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

现在,很好,我可以发送 csrf 令牌了。 我的问题是,我怎样才能填充 cookie?在发布之前我是否必须执行 get() 才能获取令牌?因为目前我的 cookie 是空的 :(

谢谢

【问题讨论】:

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


    【解决方案1】:

    假设你的angularjs代码使用jquery ajax发布,可以把csrf token放到meta标签中

    <!--<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);
        }..............
    });
    

    【讨论】:

      【解决方案2】:

      如果您不共享同一个域,则不能使用SessionAuthentication 方法。在您的情况下,OAuth2Authentication 是要走的路。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-10-09
        • 1970-01-01
        • 2013-07-20
        • 2012-07-21
        • 2019-12-24
        • 2018-11-05
        • 2013-08-11
        • 2016-08-03
        相关资源
        最近更新 更多