Ich habe gerade eine einfache App mit ein paar Formulare auf Rails 5.0.0beta3 gestartet.Rails 5.0.0beta3: ActionController :: InvalidAuthenticityToken in Entwicklung
In Entwicklung, mit http://localhost:3000 auf Safari oder Chrome auf die App zugreifen, wenn ich ein Formular ausfüllen und abschicken ich immer einen ActionController::InvalidAuthenticityToken
Fehler. Allerdings, wenn ich die Seite vor dem Füllen und Senden neu laden, dann funktioniert es gut.
Die App nutzt die Standardwerte:
protect_from_forgery with: :exception
in Application,<%= csrf_meta_tags %>
in HTML-Header durch Anwendung Layout- Entwicklungsumgebung wie durch Schienen geschaffen.
Beispiel:
<%= 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 %>
Log:
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)
Es funktioniert gut, wenn ich pro Form CSRF-Token in der Steuerung (self.per_form_csrf_tokens = false
) so mein Problem zu deaktivieren ist wirklich auf diesem Niveau.
Die Sitzung scheint zu keinem Zeitpunkt zurückgesetzt zu werden.
Interessanterweise unterscheidet sich das Authentizitätstoken im Kopfzeilen-Menage-Tag beim ersten Laden des Formulars von dem Token im Formular. Das Meta-Tag befindet sich auch am Ende der Tags der Kopfzeile. Wenn ich dann neu lade, sind die Token sowohl im Meta-Tag als auch im Formular identisch, und das Meta-Tag befindet sich ganz oben in den Tags des Headers.
Update:
Ich denke, dass das Problem bis zu Turbolinks ist.
Wenn auf die Formularseite von einer anderen Seite in der App aus zugegriffen wird, wird von Turbolinks eine XHR-Anforderung ausgelöst, und ich stoße auf das Problem.
Wenn ich jedoch die Seite neu lade, lädt der Browser sie neu und ich sehe das Problem nicht.
Sind Ihre Formulare erstellt mit 'form_for' und enthalten die richtigen CSRF-Eingänge? Es wird für normale synchrone Formulareinreichungen verwendet. Verwenden Sie eine Art Fragment-Caching, die ein "abgestandenes" CRSF-Meta-Tag liefern könnte? – max
Gibt es Skriptfehler in der Browserkonsole? – max
Ja, Formulare mit 'form_for' erstellt und enthält das Token (siehe Update meiner Frage). Caching ist in der Standardentwicklungsumgebung deaktiviert. Keine Fehler in der Browser-Konsole. – spicyhotpot