Django,CSRF令牌,POST请求。适用于浏览器但不适用于手机

时间:2012-07-24 09:54:13

标签: ajax django csrf

正在问题标题中提出问题。

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

我目前正在使用openjift上的django 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基本上是一个带有Status&的json回复。信息。用户名和密码是用户输入的。我也试过使用发送csrfmiddlewaretoken的数据,结果相同。

那么任何解决方案?顺便说一下,我在iPhone 4S和谷歌Chrome上测试它。在此先感谢人们:)

1 个答案:

答案 0 :(得分:0)

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

在Javascript中:

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

csrfmiddlewaretoken: csrftoken进入您的POST请求数据

在视图上使用@ensure_csrf_cookie

中的django.views.decorators.csrf装饰器