我需要在运行时向我的Rails6应用程序动态添加一个允许的主机。
我已经设法在运行时追加到Rails.application.config.hosts
,但仍然收到Blocked host
错误。Rails似乎忽略了添加到Rails.application.config.hosts
的主机,这些主机是在application.rb和初始化程序之外添加的。
看看host_authorization.rb,我看不出有什么明显的方法可以让它监听新主机。
我的理由:
用户可以在我们的平台上以编程方式创建自己的“商店”,这将向我们的多租户应用程序添加一个新的“租户”(apartment gem)。我们还允许他们将自己的域指向我们的应用程序。
但是,为了允许来自他们的自定义域的流量,如果我们坚持使用默认的白名单域,我们目前需要手动重启应用程序。
我知道我可以使用一个变通办法,只是设置主机白名单的一切(Rails.application.config.hosts = nil
),但我们需要保持平台的安全和自动化。
1条答案
按热度按时间62lalag41#
config.hosts
中的项使用===
运算符进行比较,这意味着我们可以在该数组中包含一个lambda,从而使动态检查成为可能。举个例子,假设我们从
MyApp.all_permitted_domains
返回一个全局允许列表,那么在config/application.rb
中我们可以写:但是请注意,在这种情况下,通常在主机授权时执行的其他处理(例如处理端口号,或者前导
"."
的特殊情况)不包括在内。如果您也需要这种行为,请查看host_authorization.rb
源文件中的sanitize_hosts
方法以了解如何实现。