【问题标题】:Generating CSRF token for Backbone from Django从 Django 为 Backbone 生成 CSRF 令牌
【发布时间】:2014-08-31 05:43:53
【问题描述】:

我一直在 Django 之上开发一个主干层,并使用 Django 创建 API,并让主干模型调用 django api 来填充模型。我正在尝试使用用户的默认 django 模型为用户创建登录名。因为我不是通过 django 渲染页面,而是通过骨干网中的路由器。我无法通过 django 的模板语言 {{ csrf_token }} 生成 csrf 令牌,因此我无法发布任何表单。

我认为解决此问题的一种方法是通过在初始化时从 api 端点获取主干视图并让端点生成令牌来生成令牌

token = csrf._get_new_csrf_key()

然后通过 json 将其传递给主干前端,然后按照 django 文档进行操作

var csrftoken = "<%=obj.csrftoken%>";

function csrfSafeMethod(method) {
    // these HTTP methods do not require CSRF protection
    return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
}

$.ajaxSetup({
    beforeSend: function(xhr, settings) {
        if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
            xhr.setRequestHeader("X-CSRFToken", csrftoken);
        }
    }
});

这不起作用,因为我仍然收到 Forbidden (403) CSRF 验证失败。请求中止。

任何帮助将不胜感激。谢谢

【问题讨论】:

    标签: django backbone.js


    【解决方案1】:

    最简单的解决方法是读取csrftoken cookie 并将其作为X-CSRFToken 标头传递给django。 Django 文档中的 section 应该为您提供正确的示例:

    【讨论】:

    • 我完全按照 django 文档设置标题,因为代码与文档中的示例完全相同。
    猜你喜欢
    • 1970-01-01
    • 2010-12-20
    • 2017-05-27
    • 2014-01-21
    • 1970-01-01
    • 2021-10-19
    • 2013-04-25
    • 2012-09-18
    • 2013-08-11
    相关资源
    最近更新 更多