Rails 5.0.0beta3でいくつかのフォームを使って簡単なアプリケーションを開始しました。Rails 5.0.0beta3:ActionController :: InvalidAuthenticityToken開発中
SafariまたはChromeでhttp://localhost:3000を使用してアプリにアクセスすると、フォームに記入して送信すると、いつもActionController::InvalidAuthenticityToken
というエラーが表示されます。 しかし、私がページを書き込んでそれを提出する前にリロードすると、うまく動作します。
アプリは、デフォルト値を使用する:アプリケーションのレイアウトを介してHTMLヘッダ内ApplicationControllerにで
protect_from_forgery with: :exception
、<%= csrf_meta_tags %>
、レールによって作成されるよう- 開発環境。
例:
<%= form_for @node, url: admin_book_nodes_url, as: :node do |form| %>
<%= render "form", f: form %>
<p><%= form.submit %> or <%= link_to "Cancel", admin_book_nodes_path %></p>
<% end %>
ログイン:
Started POST "/admin/book/nodes" for ::1 at 2016-03-20 11:54:31 +0000
Processing by Admin::Book::NodesController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"/G5pF6hSPx0Vf21Fi0FCh+VlOcHY4w8C5lmHmwr3NQRjfXUP9/xboybeV3tevmyTyHcwSX8LplU/HgZVGDbGlw==", "node"=>{"parent_id"=>"1", "position"=>"1", "title"=>"lkjlkj", "description"=>"lkjlj", "published"=>"0", "content"=>"lkjlkj"}, "commit"=>"Create node"}
Can't verify CSRF token authenticity
Completed 422 Unprocessable Entity in 1ms (ActiveRecord: 0.0ms)
私は、コントローラ(self.per_form_csrf_tokens = false
)でフォームのCSRFトークンごとに無効にする場合、それはので、私の問題は、そのレベルで本当にうまく動作します。
セッションはいつでもリセットされていないようです。
興味深いことに、フォームが最初に読み込まれると、ヘッダーのmenageタグ内の信頼性トークンがフォーム内のトークンと異なります。メタタグはヘッダーのタグの一番下にもあります。 メタタグとフォームの両方でトークンをリロードすると、メタタグはヘッダーのタグの先頭に表示されます。
更新:
私は、問題がダウンしTurbolinksにあると思います。
アプリ内の別のページからフォームページにアクセスすると、TurbolinksによってXHRリクエストが発生し、問題が発生します。
ただし、ページをリロードすると、ブラウザがリロードしても問題は表示されません。
は、フォームがform_for' 'で作成されます(まだ解決されていない)、正しいCSRFの入力が含まれていますか?通常の同期フォームの提出に使用されます。あなたは "古い" CRSFメタタグを提供することができる何らかの種類のフラグメントキャッシュを使用していますか? – max
ブラウザコンソールにスクリプトエラーがありますか? – max
はい、フォームはform_forで作成され、トークンを含んでいます(私の質問の更新を見てください)。デフォルトの開発環境では、キャッシングは無効になっています。ブラウザコンソールにエラーはありません。 – spicyhotpot