【发布时间】:2016-06-30 06:10:14
【问题描述】:
在我的 rails 应用程序上,在所有页面的 head 部分都有这 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" /> 仍然可以发布信息并创建新记录...
【问题讨论】:
-
当这样调用时,您可以发送局部变量: {:token => 'kasdlfjasldfj'} %
-
form_forbuilder 或form_tag通常负责添加一个带有真实性令牌的隐藏字段,你能告诉我们shared/comment_form的形式吗?
标签: ruby-on-rails forms csrf