Добавление ограничения поддомена

#ruby-on-rails #subdomain #ruby-on-rails-6

#ruby-on-rails #поддомен #ruby-on-rails-6

Вопрос:

В настоящее время у меня есть следующая строка в файле route.rb resources :pages, only: %i[index show create]

Двигаясь вперед, я хочу, чтобы мои пользователи получали доступ pages#show через выделенный поддомен. Итак, я добавил следующую строку:

 constraints subdomain: 'pages' do
 get '/:id' =>  'pages#show'
end
  

(Я планирую сохранить оба маршрута для ретро-совместимости)

Что позволяет пользователям получать к нему доступ через pages.mydevdomain.com/my-page-id При выполнении этого в среде разработки я получаю следующее сообщение:

 To allow requests to pages.mydevdomain.com, add the following to your environment configuration:
config.hosts << "pages.mydevdomain.com"
  

Что я и сделал, и это работает. Однако, если я доберусь до этого, http://pages.mydevdomain.com я увижу все созданное мной приложение, что означает, что этот поддомен предназначен не только для pages#show того, чтобы я этого хотел.

Ответ №1:

Насколько я понимаю, это ограничение заключается в том, что вы можете получить доступ к pages#show action только через поддомен. Но вы также разрешаете доступ с помощью resources метода. Таким образом, ограничение не имеет никакого эффекта.

Вы не ограничиваете доступ к любому другому контроллеру. Может быть, вы хотите обернуть свои маршруты следующим образом:

 constraints subdomain: '' do
  resources :pages, only: %i[index show create]
end

constraints subdomain: 'pages' do
  get '/:id' =>  'pages#show'
end
  

Комментарии:

1. Основная проблема заключается в том, что доступно не только resources :pages, only: %i[index show create] через поддомен, но и все приложение.

2. Как я уже сказал. Если вы хотите ограничить доступ ко всему приложению, вам также необходимо установить ограничение вокруг этих маршрутов.