我收到间歇性的CSRF令牌真实性错误。具体来说,当我通过POST提交常规表单时偶尔会发生这种情况。如果我在再次提交表单之前去其他几个随机页面,我可以通过此错误。这个错误并不总是出现,偶尔会出现。这让我觉得生成的csrf元标记可能并不总是有效。
我已在application.html.erb的标题中包含以下语句
<%= csrf_meta_tags %>
我在application_controller.rb
中也有以下内容protect_from_forgery
还有什么我应该做的吗?
答案 0 :(得分:1)
如果您使用Rails助手form_tag
或form_for
来生成“常规表单”,那么您将看到是否检查HTML是否在表单标记下生成了额外的div,其中包含utf8合规性的隐藏字段和authenticity_token
。
如果您正在编写自己的表单(使用<form>...</form>
或%form
),则需要手动添加真实性令牌。
您可以使用另一个名为form_authenticity_token
的助手:
<input name="authenticity_token" type="hidden" value="<%= form_authenticity_token %>">
但我建议您使用Rails表单标记帮助程序,并避免添加自己的真实性标记字段。