【发布时间】: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 选项,因此它可以正常工作。无论如何谢谢大家:)