ruby-on-rails - Rails 5 - 无法验证 CSRF 令牌的真实性 - 只有有时
问题描述
我有一个 Rails 5 应用程序,并且正在使用表单提交数据。我正在使用 CSRF 保护,表单会生成一个隐藏字段'authenticity_token'
。效果很好!
但有时用户会得到错误'Can't verify CSRF token authenticity'
。我想知道为什么会这样?我只能想象用户禁用了 cookie。但是哪个普通的互联网用户会这样做?还有其他原因吗?
我无法在我的计算机上重现此错误。所以我唯一的解决方案是禁用 CSRF 保护,这不是我真正想做的。
有任何想法吗?
解决方案
Can't verify CSRF token authenticity
结果500 Internal Server
。
我想知道为什么会这样?我只能想象用户禁用了 cookie。但是哪个普通的互联网用户会这样做?还有其他原因吗?
是的,这会发生。或者用户(或黑客)尝试向端点发出 API 请求,因为它无法验证真实性令牌,所以会抛出此错误。普通用户不会这样做,但也许有人重视他们的隐私并可能会关闭这些设置,或者他们可能想使用 Tor 浏览器等等。作为开发人员,我们所能做的就是努力为最终用户提供最佳体验。
因此,更好的做法是500 Internal Server
使用一些自定义消息捕获错误,然后将其显示给最终用户,同时将其发送Stack trace
给您自己(松弛通知等),以便您可以在这是一个关键问题时进行处理。
这样,如果从用户端一切都好,这将正常工作。但如果有人禁用 cookie(或任何导致错误的东西),您可以显示有关该问题的自定义消息。