【问题标题】:Django dont set CSRF token on AJAX GET from angularJSDjango 不要在 angularJS 的 AJAX GET 上设置 CSRF 令牌
【发布时间】:2016-05-16 17:16:07
【问题描述】:

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

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

我添加了 httpProvider 默认值,并在 Angular 应用程序开始时发出 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 请求。

【问题讨论】:

    标签: angularjs ajax django csrf django-csrf


    【解决方案1】:

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

    【讨论】:

    • 非常感谢!装饰器帮了我
    猜你喜欢
    • 2013-08-11
    • 2020-05-29
    • 2016-06-22
    • 2017-06-17
    • 2016-05-08
    • 2018-09-07
    • 1970-01-01
    • 2019-01-13
    • 2014-11-04
    相关资源
    最近更新 更多