Rails 4. partial渲染的表单如何添加authenticity_token?
Rails 4. How to add authenticity_token to forms rendered via partial?
在我的 rails 应用程序的所有页面上,在标题部分有以下 2 个元标记:
<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
吗?如果是,我该如何验证它?
编辑:
shared/_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" />
仍然设法 post 信息并创建新记录...
好的,看来它是关于远程表单而不是通过部分加载的表单:
已将 config.action_view.embed_authenticity_token_in_remote_forms 的默认值更改为 false。此更改破坏了在没有 JavaScript 的情况下也需要工作的远程表单,因此如果您需要这种行为,您可以将其设置为 true 或显式传递 authenticity_token: true 在表单选项中。
对于您的情况,我们有两种方法:
在表单选项中添加authenticity_token: true
手动将 authenticity_token 字段添加到表单中,如下所示:
<%= hidden_field_tag :authenticity_token, form_authenticity_token -%>
在我的 rails 应用程序的所有页面上,在标题部分有以下 2 个元标记:
<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
吗?如果是,我该如何验证它?
编辑:
shared/_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" />
仍然设法 post 信息并创建新记录...
好的,看来它是关于远程表单而不是通过部分加载的表单:
已将 config.action_view.embed_authenticity_token_in_remote_forms 的默认值更改为 false。此更改破坏了在没有 JavaScript 的情况下也需要工作的远程表单,因此如果您需要这种行为,您可以将其设置为 true 或显式传递 authenticity_token: true 在表单选项中。
对于您的情况,我们有两种方法:
在表单选项中添加
authenticity_token: true
手动将 authenticity_token 字段添加到表单中,如下所示:
<%= hidden_field_tag :authenticity_token, form_authenticity_token -%>