2016-03-15 3 views
6

На моей рельсы приложение, на всех страницах, в головной части есть эти 2 мета-теги:Rails 4. Как добавить authenticity_token в формы, полученные посредством частичного?

<meta name="csrf-param" content="authenticity_token" /> 
<meta name="csrf-token" content="027GUZBeEkmv..." /> 

О формах не визуализируется с использованием частичного есть скрытый authenticity_token поле

<input type="hidden" name="authenticity_token" value="D5TddQruJppDD3..." /> 

Но это поле пропускает, если я просто загружаю форму следующим образом:

<%= render 'shared/comment_form' %> 

Ожидается ли такое поведение? Должен ли я вручную добавить authenticity_token, и если да, то как его проверить?

Edit:

общий/_comment_form.html.erb

<%= form_for([@post, @comment], :html => { :onsubmit => "validateCommentForm(event)" }, remote:true) do |f| %> 
    <%= render 'shared/error_messages', object: f.object %> 
    <div class="field"> 
     <%= f.text_area :content, placeholder: "Add to the article. Make it be more" %> 
    </div> 

    <%= f.submit "Save", class: "btn btn-info" %> 
<% end %> 

Кроме того, добавление <input type="hidden" name="authenticity_token" id="authenticity_token" value="ANYTHING" /> к этой форме все же удается разместить информацию и создать новую запись ...

+0

Вы можете отправить местных жителей с частичным, когда называют такие: <% = render'shared/comment_form,: местные => {: маркер => 'kasdlfjasldfj'}% – bkunzi01

+0

'form_for' строитель или' form_tag 'обычно заботится о добавлении скрытого поля с токеном аутентификации, можете ли вы показать нам форму' shared/comment_form'? – sled

ответ

25

В вашем случае, у нас есть два способа сделать:

  1. Добавить authenticity_token: true в опции формы

  2. вручную добавить authenticity_token поле в форме, как это :

<%= hidden_field_tag :authenticity_token, form_authenticity_token -%>

+0

Да, это решение, но также объяснение того, что происходит, необходимо понять, почему это происходит, и я добавил, что в ответе ниже – Catalin

2

Хорошо, это похоже на удаленные формы, а не формы, загруженные через частичное:

Изменено значение по умолчанию для config.action_view.embed_authenticity_token_in_remote_forms на false. Это изменение разбивает удаленные формы, которые также должны работать без JavaScript, поэтому, если вам нужно такое поведение, вы можете либо установить его в true, либо явно передать authenticity_token: true в параметрах формы.

Найдено ответ здесь: https://github.com/rails/rails/issues/10608

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