Вот моя ситуация, у меня есть приложение Rails 4, к которому могут обращаться несколько доменов, в зависимости от домена, содержимое меняется.
Скажем, основной домен - domain1
, а все остальные домены просто используют Nginx proxy_pass
для пересылки запросов на domain1
, это все работает нормально, за исключением того, что когда пользователь входит в систему domain2
, rails устанавливает сеанс для domain1
, поэтому пользователь в domain2
остается в системе, поскольку сеанс не установлен для domain2
.
Я понимаю, что куки не могут быть общими для разных доменов, но, поскольку это одно и то же приложение, которое обрабатывает все эти домены, безусловно, что-то должно быть возможно.
Есть идеи?
UPDATE
Вот где я нахожусь:
- Я добавил настраиваемый заголовок для пропуска прокси, который содержит домен, из которого осуществляется доступ к приложению.
- Я написал промежуточное ПО, которое проверяет этот заголовок и устанавливает
rack.session.options domain
для домена, указанного в настраиваемом заголовке.
- Я включил промежуточное ПО в файлах
development.rb
и production.rb
.
- Я добавил
:domain => :all
в опции session_store
.
- В контроллерах, которые я проверил,
session.options[:domain]
правильно установлено на domain2
.
Пока я не могу установить сеанс с domain2
, что мне здесь не хватает?
КОД
Middleware
class ProxyPassCookie
def initialize app
@app = app
end
def call env
host = env["HTTP_HOST"].split(':').first
#rack attaches HTTP_ to all headers
dom = env["HTTP_WLDOMAIN"].blank? ? host : env["HTTP_WLDOMAIN"]
env["rack.session.options"][:domain] = ".#{dom}"
@app.call(env)
end
end
конфиг / Инициализаторы / session_store.rb
Rails.application.config.session_store :cookie_store, key: '_myapp_session', :domain => :all
config / environment / development.rb | production.rb
config.middleware.use "ProxyPassCookie"
Должен быть способ сделать это, любой вклад приветствуется!