【问题标题】:Ruby on Rails - Occasional Invalid Authenticity TokenRuby on Rails - 偶尔无效的真实性令牌
【发布时间】:2018-06-20 02:32:48
【问题描述】:

我遇到过一些情况,用户可能会闲置一段时间,然后可能会在刷新或不刷新的情况下返回到页面,并且在页面上提交表单后,用户会收到 HTTP 422 无效的真实性令牌错误。

我了解此错误的含义,但我不确定如何正确处理该错误。我不想在我的控制器中删除对令牌的验证。我看到的所有其他问题都只是谈论令牌是什么,而不是如何解决问题。

【问题讨论】:

标签: ruby-on-rails ruby


【解决方案1】:

您可以检查表单上的元素(使用开发人员工具),以查看是否存在包含令牌的隐藏输入。否则,您可以手动将authentity_token 添加到表单助手中,例如

<%= form_for(@model, ... authenticity_token: true) do |f| %>

然后尝试显示表单以确保您可以看到已添加到表单中的隐藏输入authentity_token。我在使用 ajax 时也有同样的经历,我是这样实现的:

<%= form_for(@model, html: { multipart: true }, remote: local_assigns[:ajax_form], authenticity_token: true) do |f| %> or

<%= form_for(@model, html: { multipart: true }, remote: true, authenticity_token: true) do |f| %> 

【讨论】:

  • 所以我确实在元标记中看到了真实性令牌,但没有嵌入到我的表单中。令牌没有被提交(我可以在我的 rails 控制台中看到它)。我正在使用 ajax 提交这些表单。什么会导致这只有 1% 的时间失败?我希望它们都不起作用。
  • 按照上面的步骤,你也会在你的表单中看到它,这将保证它。它可能是与它交互的a​​jax。我有同样的经历
  • 好的,我会试一试。为什么我至少不会在请求的日志中看到身份验证令牌,这仍然没有意义。
  • 如果您检查表单上的元素,您会看到它。我还在研究原始authentity_token被带走的东西
  • 所以我添加了您建议的代码,并且真实性令牌现在呈现为表单中的隐藏输入。但是,我决定手动更改值,rails 仍然接受已提交的更改后的身份验证令牌,并且没有抛出任何错误。我正在开发模式下对此进行测试。
猜你喜欢
  • 2019-06-20
  • 2018-06-29
  • 2010-11-15
  • 1970-01-01
  • 2017-05-26
  • 1970-01-01
  • 2011-03-04
  • 2013-04-21
  • 2016-03-19
相关资源
最近更新 更多