【问题标题】:Rails 5.2 ActionController::InvalidAuthenticityTokenRails 5.2 ActionController::InvalidAuthenticityToken
【发布时间】:2018-11-27 01:47:23
【问题描述】:

升级到 Rails 5.2 后,我的应用程序中的所有表单都开始出现 ActionController::InvalidAuthenticityToken 错误。我已经通过禁用所有表单的 Turbolinks 来解决这个问题,这可行但不是一个很好的解决方案。

搜索互联网,推荐的常见解决方案似乎是禁用 protect_from_forgery

skip_before_action :verify_authenticity_token, raise: false

为什么我们需要禁用 protect_from_forgery,这不会造成安全漏洞吗?

编辑

csrf_meta_tags 在布局中。

【问题讨论】:

    标签: ruby-on-rails csrf


    【解决方案1】:

    对于 Rails 5.2,default_protect_from_forgery 在 ActionController::Base 上是 enable by default。

    您可以按照in the PR 的说明使用以下语法禁用它。

    config.action_controller.default_protect_from_forgery = false
    

    参考来自docs:

    config.action_controller.default_protect_from_forgery 确定是否在 ActionController:Base 上添加伪造保护。默认情况下为 false,但在为 Rails 5.2 加载默认值时启用。

    【讨论】:

    • 谢谢你,但如果设置了这个,应用程序现在不是对 csrf 攻击开放了吗?
    • 您可以在您的ApplicationController 中使用protect_from_forgery。如果它再次生成错误,那么您可能在某处错过了元标记,可能是在 AJAX 调用中
    • 默认设置为ActionController::Base,这就是为什么如果您使用的某些外部库可能会导致错误。在ApplicationController 中设置protect_from_forgery 将使您的控制器安全。
    【解决方案2】:

    对于 rails 5.2,我必须将这些添加到控制器内部的行中,我遇到了问题:

      skip_before_action :verify_authenticity_token, raise: false
      skip_after_action :verify_authorized
    

    它在我的情况下有效。

    【讨论】:

      猜你喜欢
      • 2019-06-23
      • 2018-11-02
      • 2015-11-23
      • 2017-11-13
      • 2015-05-21
      • 2016-11-14
      • 2019-12-25
      • 1970-01-01
      • 2015-01-10
      相关资源
      最近更新 更多