2

私のフォームがなくremote: trueても、ログインは機能します。しかし、を使用しremote: trueてajax経由でログインしようとすると、次のエラーが発生します。

You need to sign in or sign up before continuing.

リクエストは両方とも投稿です。誰かが私を啓発できますか?

4

1 に答える 1

4

あなたが従う必要があるいくつかのステップがあります:

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
  }
});
于 2013-02-04T11:04:48.100 に答える