【问题标题】:Ubuntu 16.04 LTS Django CSRF cookie not set未设置 Ubuntu 16.04 LTS Django CSRF cookie
【发布时间】:2017-01-10 17:07:06
【问题描述】:

我在 VirtualBox(5.0.10) 上有 Ubuntu(64 位) 用于测试环境。当我尝试执行 Ajax 发布请求时,我得到“禁止(未设置 CSRF cookie。)”。

但我的 Web 应用程序中的相同发布操作在 OS X 的开发环境下运行良好。我怀疑这是新 Ubuntu 版本中的错误。

有人知道为什么会这样吗?

谢谢。

编辑:

        $.ajax({
            type: 'post',
            url: '{% url 'add-new-watch-folder' %}',
            data: {
                dirs: dirsJSON,
                csrfmiddlewaretoken: '{{ csrf_token }}'
            },
            dataType: 'text',
            success: function(result){
                console.log(result);
            },
            error: function(xhr, status, error){
                console.log(error);
            }
        });

【问题讨论】:

  • 您是否尝试过使用 postman 之类的插件来查看两台机器之间的差异?
  • 这是一个简单的发布操作,所以我不需要。当我在测试环境中检查 cookie 时,我看到没有设置“csrftoken”和“sessionid”cookie。这其实就是区别。但不知道为什么。
  • 请发布您的Ajax调用代码和获取CSRF令牌的功能
  • @Aison 编辑了我的问题。

标签: django cookies csrf ubuntu-16.04


【解决方案1】:

我认为这不是你系统的错误,开发环境隐藏了一些安全机制。

您可以在the Django documentation 中找到有关如何在 AJAX 上使用 POST 并获取 CSRF 令牌的答案。

您也可以使用 GET,它不需要 CSRF 令牌。

【讨论】:

  • 感谢您的回答。您能否更详细地解释一下开发环境隐藏了哪些安全机制?此外,问题出在测试环境中,因为您可能还没有阅读过该问题。我在我的问题中说 POST 请求在开发环境中运行良好,所以基本上我已经知道如何在 Django Web 应用程序中使用 AJAX 发出 POST 请求。而且你不应该在需要 POST 的地方使用 GET 请求。
猜你喜欢
  • 2021-06-22
  • 1970-01-01
  • 1970-01-01
  • 2017-05-05
  • 2020-12-05
  • 2013-03-28
  • 2012-05-03
  • 2016-11-26
  • 1970-01-01
相关资源
最近更新 更多