【发布时间】: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