4

Я только что начал простое приложение с несколькими формами на 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, и я сталкиваюсь с проблемой.

Однако, когда я перезагружаю страницу, браузер перезагружает ее, и я не вижу проблемы.

+1

Создаются ваши формы с 'form_for' и содержат правильные входы CSRF? Используется для обычных сообщений в виде синхронной формы. Используете ли вы какое-то кэширование фрагментов, которое могло бы предоставить «устаревший» метатег CRSF? – max

+0

Есть ли ошибки скрипта в консоли браузера? – max

+0

Да, формы, созданные с помощью 'form_for' и содержащие токен (см. Обновление моего вопроса). Кэширование отключено в среде разработки по умолчанию. Ошибок в консоли браузера нет. – spicyhotpot

ответ

5

Я поднял вопрос о Rails.

После дальнейшего расследования кажется, что выпуск связан с опцией :url в form_for.

См: Issue #24257 (пока не решен)

+0

В случае, если это полезно, комментарий по этому вопросу выдает ссылки на небольшую заметку, в которой он разрабатывает README в отношении Rails 5: https://github.com/plataformatec/devise/pull/4033/files. Это устранило мои проблемы. –

Смежные вопросы