使用 Apartment 禁用子域
disabling subdomains with Apartment
我在 rails 应用程序中使用公寓 gem。
我有一个数据库,每个租户都有模式,租户 table 有一个 public 模式。
我排除了 www 子域:
Apartment::Elevators::Subdomain.excluded_subdomains = ['www']
然后,如果我输入public.page.com
或www.page.com
,公寓不会切换到其他租户,而是会留在public。当然 "public" 本身不是租户,只是租户之间的公共数据,所以,我不希望任何用户使用 public 模式。
避免这种情况的正确方法是什么?
此应用程序在 AWS 上 运行,因此,路线 53 将阻止这种情况,但是,尽管我想避免 rails 通过此子域服务请求。
除了从公寓中排除域外,您还需要从路由中排除它们。
在我的项目中,我使用这段代码来管理这个:
我正在使用初始化程序创建已排除的子域数组。
# config/initializers/apartment/subdomain_exlusions.rb
Apartment::Elevators::Subdomain.excluded_subdomains = ['www', 'admin']
然后,我们可以在路由中的助手class中使用这个数组。
# config/routes.rb
class ExcludedSubdomainConstraint
def self.matches?(request)
request.subdomain.present? && !Apartment::Elevators::Subdomain.excluded_subdomains.include?(request.subdomain)
end
end
Rails.application.routes.draw do
constraints ExcludedSubdomainConstraint do
# here routes that are accessible in subdomains
end
end
作为奖励,您可以将排除的子域路由到另一个约束
class DashboardSubdomainConstraint
def self.matches?(request)
Apartment::Elevators::Subdomain.excluded_subdomains.include?(request.subdomain) || request.subdomain == ''
end
end
constraints DashboardSubdomainConstraint do
namespace :dashboard do
get '/settings'
end
end
会给你一条像 www.domain.com/dashboard/settinigs 这样的路线,可以访问 public 个租户。
提示。您可以在关注点
中使用不同的root
方法
我在 rails 应用程序中使用公寓 gem。
我有一个数据库,每个租户都有模式,租户 table 有一个 public 模式。
我排除了 www 子域:
Apartment::Elevators::Subdomain.excluded_subdomains = ['www']
然后,如果我输入public.page.com
或www.page.com
,公寓不会切换到其他租户,而是会留在public。当然 "public" 本身不是租户,只是租户之间的公共数据,所以,我不希望任何用户使用 public 模式。
避免这种情况的正确方法是什么?
此应用程序在 AWS 上 运行,因此,路线 53 将阻止这种情况,但是,尽管我想避免 rails 通过此子域服务请求。
除了从公寓中排除域外,您还需要从路由中排除它们。 在我的项目中,我使用这段代码来管理这个:
我正在使用初始化程序创建已排除的子域数组。
# config/initializers/apartment/subdomain_exlusions.rb
Apartment::Elevators::Subdomain.excluded_subdomains = ['www', 'admin']
然后,我们可以在路由中的助手class中使用这个数组。
# config/routes.rb
class ExcludedSubdomainConstraint
def self.matches?(request)
request.subdomain.present? && !Apartment::Elevators::Subdomain.excluded_subdomains.include?(request.subdomain)
end
end
Rails.application.routes.draw do
constraints ExcludedSubdomainConstraint do
# here routes that are accessible in subdomains
end
end
作为奖励,您可以将排除的子域路由到另一个约束
class DashboardSubdomainConstraint
def self.matches?(request)
Apartment::Elevators::Subdomain.excluded_subdomains.include?(request.subdomain) || request.subdomain == ''
end
end
constraints DashboardSubdomainConstraint do
namespace :dashboard do
get '/settings'
end
end
会给你一条像 www.domain.com/dashboard/settinigs 这样的路线,可以访问 public 个租户。
提示。您可以在关注点
中使用不同的root
方法