ruby-on-rails 如何将主机动态添加到允许的Rails主机中?

r1zhe5dt  于 2022-11-19  发布在  Ruby
关注(0)|答案(1)|浏览(202)

我需要在运行时向我的Rails6应用程序动态添加一个允许的主机。
我已经设法在运行时追加到Rails.application.config.hosts,但仍然收到Blocked host错误。Rails似乎忽略了添加到Rails.application.config.hosts的主机,这些主机是在application.rb和初始化程序之外添加的。
看看host_authorization.rb,我看不出有什么明显的方法可以让它监听新主机。

我的理由:

用户可以在我们的平台上以编程方式创建自己的“商店”,这将向我们的多租户应用程序添加一个新的“租户”(apartment gem)。我们还允许他们将自己的域指向我们的应用程序。
但是,为了允许来自他们的自定义域的流量,如果我们坚持使用默认的白名单域,我们目前需要手动重启应用程序。
我知道我可以使用一个变通办法,只是设置主机白名单的一切(Rails.application.config.hosts = nil),但我们需要保持平台的安全和自动化。

62lalag4

62lalag41#

config.hosts中的项使用===运算符进行比较,这意味着我们可以在该数组中包含一个lambda,从而使动态检查成为可能。
举个例子,假设我们从MyApp.all_permitted_domains返回一个全局允许列表,那么在config/application.rb中我们可以写:

config.hosts << ->(host) {
  MyApp.all_permitted_domains.include?(host)
}

但是请注意,在这种情况下,通常在主机授权时执行的其他处理(例如处理端口号,或者前导"."的特殊情况)不包括在内。如果您也需要这种行为,请查看host_authorization.rb源文件中的sanitize_hosts方法以了解如何实现。

相关问题