【问题标题】:ActionController::InvalidAuthenticityToken coming suddenlyActionController::InvalidAuthenticityToken 突然来了
【发布时间】:2021-06-20 20:59:12
【问题描述】:

我在 Rails 5 中有旧项目,我必须添加 Api 并且它工作正常,3 天前,但现在它突然开始给我ActionController::InvalidAuthenticityToken 我没有对任何与 web 相关的控制器进行任何更改,但是添加了一些 Gems 包括 rspec-rails, jwt 并创建了它的 Api,但突然在 chrome 上它给了我这个错误。

当我开始工作时,我进行了测试,它运行良好,并且在 Safari 浏览器上运行良好。但是在 Chrome 上它给出了这个错误。如果我禁用此错误会在我的应用程序中添加以下行,但我认为这会使其不安全。

  protect_from_forgery with: :exception, prepend: true

我检查了几个答案,其中列出了它的旧问题,但我正在处理许多 Rails 项目,但我从未见过这个问题!有些帖子指示我使用 https,所以我也使用了 https,但 chrome 的问题仍然存在。

任何帮助

【问题讨论】:

  • 您的应用程序控制器是继承自ActionController::Base 还是ApiController::Base。 protect_from_forgery 应该只在 ActionController::Base 中处理,但是你说你已经添加了 jwt,听起来你正在将 RESTful api 函数添加到 rails 后端。
  • 从 ActionController::Base 继承的控制器 ApplicationController 并且它都是 web,另一个控制器 ApiController 非常好,它继承自 applicationcontroller 并且是 api 控制器,所以工作正常,问题是 Chrome 给出错误而不是其他浏览器.
  • protect_from_forgery 将在表单中添加一个带有随机标记的隐藏输入,也许您想检查此输入是否存在于您的 chrome 中。听起来这个隐藏的输入在 chrome 中已被删除或损坏,可能是由于某些 chrome 插件?需要更多信息。

标签: ruby-on-rails ruby-on-rails-5 csrf


【解决方案1】:

我最初只有一个我也是这样的评论。
但幸运的是,我碰巧知道了答案。

改变的不是你的代码;是浏览器。 请查看来自 Google 的与 Same-Site 政策变更相关的新闻。

基本上,由于浏览器的变化,cookie 不再在您的环境中工作,导致 CSRF 令牌无法使用。

您必须在初始化程序中配置Rails.application.config.session_store;不幸的是,在这种情况下没有一个固定的方法;这取决于环境和情况。

【讨论】:

    【解决方案2】:

    只需将下面的行放在您的ApplicationController

    skip_before_action :verify_authenticity_token
    

    【讨论】:

    • 问题不是这个,因为在 Safari 中没有这样做,我们需要验证 CSRF 令牌。
    猜你喜欢
    • 2018-11-02
    • 2011-03-22
    • 2018-11-27
    • 2015-11-23
    • 2014-01-19
    • 1970-01-01
    • 2021-12-20
    • 2017-11-13
    • 2015-05-21
    相关资源
    最近更新 更多