【问题标题】:Django, CRSF Token , POST REQUEST. Works on browser however not on mobile phoneDjango,CSRF 令牌,POST 请求。可以在浏览器上运行,但不能在手机上运行
【发布时间】:2012-07-22 14:57:49
【问题描述】:

由于标题中提出了问题。

我想在这里更具体一点,请原谅我的英语。

我目前正在使用 django 在 openshift 上开发 jquerymobile 网站。 我有一个使用 ajax 并发送帖子请求的登录页面。我做过类似的事情。

var account = '{"Email" : "' + username + '" , "Password" : "' + password + '"}';
$.ajax({
url: "/Account/Login",
beforeSend: function(xhr) {
    xhr.setRequestHeader("X-CSRFToken", '{{ csrf_token }}');
},
type: "POST",
data: { "account" : account },
success: function(data) {
    var obj = eval("(" + data + ")");
    if (obj.Status == "100")
    {
    if(typeof(Storage)!=="undefined")
    {
        sessionStorage.user = username;
        window.location = "/";
    }
    }
    else if (obj.Status == "101")
    {
    invalid parameters sent.
    }
    else if (obj.Status == "102")
    {
    email doesnt exist / email & password pair doesn't match.
    }
},  
});

基本上 obj.Status 是带有状态和消息的 json 回复。用户名和密码由用户输入。我也尝试过使用发送 csrfmiddlewaretoken 的数据,结果是一样的。

那么有什么解决办法吗?顺便说一句,我正在 iPhone 4S 和 Google Chrome 上测试它。在此先感谢人们:)

【问题讨论】:

  • 请不要只问标题中的问题-请将问题放入正文中。并请提供有关它如何不起作用的更多详细信息。至少做console.log(data) 并将其添加到您的问题中。并将error() 函数添加到ajax 参数。请修正您的 JS 的格式和缩进。
  • 哦,以这种方式使用eval() 是一个非常糟糕的主意。或以任何方式。请改用 JSON。
  • 感谢人们的评论。是啊,我还是一个菜鸟程序员,我发现问题是在手机浏览器中,默认情况下页面加载时它不会创建CSRF cookie,是因为不安全的页面问题吗?因为每次我使用桌面浏览器查看我的页面时,它总是提示加载不安全的内容。
  • 您确定正在设置 csrf 令牌吗? CSRF 是否在 django 端正确设置?如果您使用普通桌面浏览器查看页面,是否设置了 cookie?
  • 是的,它设置正确。我实际上已经发现了问题,这是因为我使用了诸如安全 csrf cookie 之类的东西,而我的页面在没有通过 SSL 的情况下具有不安全的内容,例如外部 CSS 和 js,因此 csrf cookie 不是自动生成的。我已经修复了不安全的页面并删除了安全的 csrf cookie 选项,因此它可以正常工作。无论如何谢谢大家:)

标签: ajax django csrf


【解决方案1】:

在模板页面中添加{% csrf_token %}

在 Javascript 中:

var input = document.getElementsByName('csrfmiddlewaretoken')[0]
var csrftoken = input.getAttribute('value'); 

并将csrfmiddlewaretoken: csrftoken 放入您的 POST 请求数据中

在视图上使用来自django.views.decorators.csrf@ensure_csrf_cookie 装饰器

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-21
    • 2020-01-20
    • 1970-01-01
    • 2020-03-01
    • 1970-01-01
    相关资源
    最近更新 更多