首页 > 解决方案 > 为什么“action_mailer.perform_caching”包含在 config/environments/test.rb 中请求伪造保护的保护伞下?

问题描述

Rails v5.1.6,Ruby 2.3.3

在我新生成的 Rails 应用程序中,我看到以下代码config/environments/test.rb

# Disable request forgery protection in test environment.
config.action_controller.allow_forgery_protection = false
config.action_mailer.perform_caching = false

此文件中所有相关的代码部分似乎都由注释分隔,包括此部分。对我来说,这意味着两行未注释的代码彼此相关,并且都属于请求伪造保护的范畴(如注释中所述)。

我明白为什么这样的行action_controller.allow_forgery_protection会属于这一类,但对我来说并不明显为什么action_mailer.perform_caching会这样做。大多数其他代码行都很简单(尤其是它们各自的注释),但这个文件中的任何内容都没有使这行代码更清晰,至少对我来说是这样。

缓存电子邮件和请求伪造之间有什么联系?或者我是否错误地解释了分隔,即电子邮件实际上与请求伪造无关

更新:我怀疑这第二种情况可能是这种情况(即这两个概念可能不相关),因为在config/environments/production.rb与请求伪造无关的配置部分中找到了相同的代码行:

# Use a real queuing backend for Active Job (and separate queues per environment)
# config.active_job.queue_adapter     = :resque
# config.active_job.queue_name_prefix = "wms_#{Rails.env}"
config.action_mailer.perform_caching = false

但是,第二意见不会出错。

标签: ruby-on-railssecurityactionmailer

解决方案


他们无关。您可以在当前(未来的 6.0)模板源代码中看到,它们旨在更加清晰地分开,带有空白行,现在甚至还有另一个不相关的设置。

缺少的空白行似乎是在 Rails 5.0 开发期间引入的格式错误,其中perform_caching添加了,并且(因为模板格式不太清楚)前面的空白不是。

比较生成config/environments/test.rb的 5.1.6 和 5.2.1确认它在新版本中看起来更好(尽管该行确实是该文件中唯一没有匹配注释的设置之一)。


推荐阅读