在升级到Rails 5.2后,我开始在应用程序的所有表单中收到一个ActionController::InvalidAuthenticityToken错误。我通过禁用所有表单的Turbolinks来解决了这个问题,虽然可以工作,但不是一个很好的解决方案。
在搜索互联网时,推荐的常见解决方案似乎是禁用protect_from_forgery
skip_before_action :verify_authenticity_token, raise: false
- https://github.com/ForestAdmin/forest-rails/pull/254
- Rails 5.2某些控制器操作会出现InvalidAuthenticityToken错误
- https://github.com/nsarno/knock/issues/208
- https://github.com/rails/rails/commit/ec4a836919c021c0a5cf9ebeebb4db5e02104a55
我们为什么需要禁用protect_from_forgery,这是否会造成安全漏洞?
编辑
csrf_meta_tags
在布局中。
ApplicationController
中使用protect_from_forgery
。如果它再次生成错误,则可能在某个地方错过了meta标签,可能是在AJAX调用中。 - Kartikey TannaActionController::Base
上,这就是为什么你使用的某些外部库可能会导致错误。在ApplicationController
中设置protect_from_forgery
将使您的控制器更加安全。 - Kartikey Tanna