Django不要在angularJS上的AJAX GET上设置CSRF令牌

时间:2016-02-06 20:18:02

标签: angularjs ajax django csrf django-csrf

我正在使用AngularJS在前端和Django上编写应用程序作为后端的REST服务。我正在尝试使用POST请求发送一些JSON数据,但面临csrf-token问题(CSRF令牌丢失或不正确)。据我所知,以前我应该在Django上发出一个GET请求来获取这个令牌。所以我写了一个简单的观点:

def get_csrf_token(request):
    return HttpResponse(json.dumps({'success': True}))

我添加了httpProvider默认值,并在角度应用程序启动时在视图上发出GET请求:

angular.module('app')
    .config(function($httpProvider){
        $httpProvider.defaults.xsrfCookieName = 'csrftoken';
        $httpProvider.defaults.xsrfHeaderName = 'X-CSRFToken';
    })
    .run(function($http){
        $http.get("http://127.0.0.1:8888/get_csrf_token/")
    })

但是这个视图没有设置CSRF令牌,我仍然无法做POST请求。

1 个答案:

答案 0 :(得分:0)

如果您的视图没有呈现包含csrf_token模板标记的模板,Django可能不会设置CSRF令牌cookie。这在表单动态添加到页面的情况下很常见。为解决这种情况,Django提供了一个视图装饰器,它强制设置cookie:ensure_csrf_cookie()