2
在我的表單中沒有remote: true
,登錄工作。但是,使用remote: true
時,並試圖通過AJAX登錄,我收到此錯誤:使用Rails remote設計ajax登錄/註冊:true
You need to sign in or sign up before continuing.
的請求都崗位。有人可以啓發我嗎?
在我的表單中沒有remote: true
,登錄工作。但是,使用remote: true
時,並試圖通過AJAX登錄,我收到此錯誤:使用Rails remote設計ajax登錄/註冊:true
You need to sign in or sign up before continuing.
的請求都崗位。有人可以啓發我嗎?
有跡象表明,你需要遵循一些步驟:
1)檢查提出的要求是否是JavaScript代碼。
驗證您應該檢查請求標頭以查看Accept參數是什麼。如果它說application/javascript
那麼它都很好。使用像螢火蟲這樣的工具輕鬆檢查請求標題。
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
OR
respond_to do |format|
format.html
format.js
format.xml { .... }
end
4)設置CSRF令牌在你的application.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 protected]', password: 'password'}},
success: function(data, textStatus, xhr) {
//called when successful
}
});
謝謝!這讓我稍微接近一點。我現在收到錯誤**未定義的方法'爲'nil:NilClass **,** devise(2.1.2)lib/devise/failure_app.rb:129:在http_auth_header?**中。這*所有*通過html工作正常,但不是ajax。 –
CSRF令牌正隨請求一起發送。登錄信息正在正確發送。 1,2,3,4,5全部退房。 –
這似乎是你的設計路由問題。每次從任何策略或鉤子拋出':warden'時都會調用失敗應用程序(failure_app.rb)。負責根據當前範圍和映射將用戶重定向到登錄頁面。如果沒有給出範圍,則重定向到default_url。 –