私のフォームがなくremote: true
ても、ログインは機能します。しかし、を使用しremote: true
てajax経由でログインしようとすると、次のエラーが発生します。
You need to sign in or sign up before continuing.
リクエストは両方とも投稿です。誰かが私を啓発できますか?
私のフォームがなく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)application.jsでCSRFトークンを設定します
$(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
}
});