4

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リクエストが発生し、問題が発生します。

ただし、ページをリロードすると、ブラウザがリロードしても問題は表示されません。

+1

は、フォームがform_for' 'で作成されます(まだ解決されていない)、正しいCSRFの入力が含まれていますか?通常の同期フォームの提出に使用されます。あなたは "古い" CRSFメタタグを提供することができる何らかの種類のフラグメントキャッシュを使用していますか? – max

+0

ブラウザコンソールにスクリプトエラーがありますか? – max

+0

はい、フォームはform_forで作成され、トークンを含んでいます(私の質問の更新を見てください)。デフォルトの開発環境では、キャッシングは無効になっています。ブラウザコンソールにエラーはありません。 – spicyhotpot

答えて

5

私はRailsで問題を提起しました。

さらに調査した結果、問題は:urlform_forにあると思われます。

参照:Issue #24257

+0

もし役に立ちそうな場合は、問題は、Rails 5に関するREADMEを作成しています。https://github.com/plataformatec/devise/pull/4033/filesこれは私の問題を解決しました。 –

関連する問題