1

正如标题中提出的问题。

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

我目前正在使用 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 上测试它。在此先感谢人们:)

4

1 回答 1

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

于 2014-02-19T19:12:51.247 回答