在我的表单中没有remote: true
,登录就可以了。但是,当使用 remote: true
并尝试通过 ajax 登录时,我收到此错误:
You need to sign in or sign up before continuing.
请求都是已发布的。有人可以开导我吗?
您需要遵循一些步骤:
1)检查发出的请求是否是javascript。
验证是否应检查请求标头以查看 Accept 参数是什么。如果它说application/javascript
那么一切都很好。使用Firebug等工具轻松检查请求标头。
2) 包含哪些 JavaScript 文件?
其次,开始尝试:remote => true
时一个非常常见的问题是所需的 javascript 库不包含在您的代码中。所以我的猜测是您的布局中缺少以下代码:
<%= javascript_include_tag :defaults %>
<%= csrf_meta_tag %>
如果是这种情况,只需将其包含在 html 标头中即可。
3)检查控制器:它是否有respond_to块?
如果您使用 rails generate scaffold
生成了您的应用程序,它将具有类似
respond_to do |format|
format.html
format.xml { .... }
end
将上面的代码替换为:
respond_to :html, :js
或
respond_to do |format|
format.html
format.js
format.xml { .... }
end
4) 在您的应用程序中设置 CSRF 令牌.js
$(function(){
$.ajaxSetup({
beforeSend: function( xhr ) {
var token = $('meta[name="csrf-token"]').attr('content');
if (token) xhr.setRequestHeader('X-CSRF-Token', token);
}
});
});
5) 发布您的登录信息
$.ajax({
url: '/users/sign_in.json',
type: 'POST',
dataType: 'json',
data: {user: {email: 'email@example.com', password: 'password'}},
success: function(data, textStatus, xhr) {
//called when successful
}
});