3

アプリを Rails 2.3 から Rails 3 にアップグレード中です。

<%= csrf_meta_tag %>

私がやった私のレイアウトで。残念ながら、ajax リクエストを使用すると、ログアウトされ続けました。少し調査した後、古い方法は追加することであることがわかりました

$j(document).ajaxSend(function(e, xhr, options) {
  var token =$j("meta[name='csrf-token']").attr("content");
  xhr.setRequestHeader("X-CSRF-Token", token);  
});

私のapplication.jsファイルで。正しく動作するようになりました (実際には csrf_meta_tag は必要ないようです)。

csrf_meta_tag だけでなく、これらの 4 行のコードを application.js に追加する必要があるのは正常ですか?

4

1 に答える 1

6

まず、csrf_meta_tag が必要です。レイアウトで使用しないと、csrf-tokenメタが生成されず、application.js の修正が機能しなくなります。

gem (jquery-rails) がこれjquery-ujsを処理します。使用しているバージョンにバグがある可能性があります。(関連するバグが 3.0.x にあったことは覚えていますが、正確な問題は思い出せませんでした)。jquery-ujs を更新して jquery を再生成し ( rails generate jquery:install)、rails.js を削除して問題が修正されるかどうかを確認してください。

おまけ: Rails 3.1 の時点で、csrf_meta_tag は csrf_meta_tags に名前が変更されましたが、以前のものは引き続き使用できます。

githubの jquery-ujsを参照してください。

于 2011-08-24T00:14:12.200 に答える