Я только что начал простое приложение с несколькими формами на Rails 5.0.0beta3.Rails 5.0.0beta3: ActionController :: InvalidAuthenticityToken in development
В разработке, используя http://localhost:3000 в Safari или Chrome для доступа к приложению, заполнив форму и отправьте ее, я всегда получаю ошибку ActionController::InvalidAuthenticityToken
. Однако, если я перезагружаю страницу перед ее заполнением и отправкой, она работает нормально.
Приложение использует значения по умолчанию:
protect_from_forgery with: :exception
в ApplicationController,<%= csrf_meta_tags %>
в HTML заголовок через макет приложения,- среда разработки как созданные рельсам.
Пример:
<%= 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)
Он отлично работает, если отключить в форме CSRF токены в контроллере (self.per_form_csrf_tokens = false
), поэтому мой вопрос действительно на этом уровне.
Сессия, кажется, не сбрасывается ни в одной точке.
Интересно, что когда форма впервые загружена, токен аутентификации в теге заголовка заголовка отличается от токена в форме. Метатег также находится в нижней части тегов заголовка. Когда я перезагружаю токены, они одинаковы как в метатеге, так и в форме, а метатег находится в верхней части тегов заголовка.
Update:
Я думаю, что этот вопрос до Turbolinks.
Когда страница формы открывается с другой страницы приложения, запрос XHR запускается Turbolinks, и я сталкиваюсь с проблемой.
Однако, когда я перезагружаю страницу, браузер перезагружает ее, и я не вижу проблемы.
Создаются ваши формы с 'form_for' и содержат правильные входы CSRF? Используется для обычных сообщений в виде синхронной формы. Используете ли вы какое-то кэширование фрагментов, которое могло бы предоставить «устаревший» метатег CRSF? – max
Есть ли ошибки скрипта в консоли браузера? – max
Да, формы, созданные с помощью 'form_for' и содержащие токен (см. Обновление моего вопроса). Кэширование отключено в среде разработки по умолчанию. Ошибок в консоли браузера нет. – spicyhotpot