在我的rails应用程序中,在所有页面上,在head部分中有以下两个元标记:
<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
,如果是,我该如何验证呢?
修改
共享/ _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 :(得分:36)
在您的情况下,我们有两种方法:
在表单选项中添加authenticity_token: true
手动将authenticity_token字段添加到表单中,如下所示:
<%= hidden_field_tag :authenticity_token, form_authenticity_token -%>
答案 1 :(得分:4)
好的,所以它似乎是关于远程表单而不是通过部分加载的表单:
将config.action_view.embed_authenticity_token_in_remote_forms的默认值更改为false。此更改会破坏需要在没有JavaScript的情况下工作的远程表单,因此如果您需要此类行为,则可以将其设置为true或在表单选项中显式传递authenticity_token:true。