Rails: Dynamic Session Domain и сеанс совместного использования между субдоминами
-
10-10-2019 - |
Вопрос
У меня интересный случай. Я работаю над функциональностью белой маркировки для приложения Rails 2.3 и имею проблемы с настройкой динамических доменов сеанса.
Таким образом, у каждой белой марки должна быть собственный домен: company1.com, company2.com, company3.com. Больше, чем каждый из них должен иметь поддержку субдоменам и делиться сеансом между ними.
IE test1.company1.com, test2.company1.com, company1.com <= должен поделиться общей сессией; test1.example.com, пример.
В общем случае (для одного базового домена) это сделано таким образом:
file:production.rb
config.action_controller.session[:domain] = '.company1.com'
Если я хочу поддерживать несколько доменов, мне придется установить эту опцию конфигурации динамически на основе домена Сайта. В настоящее время я пытаюсь сделать это таким образом:
file:environment.rb
require 'dispatcher'
module ActionController
class Dispatcher
def set_session_domain
tld_size = SubdomainFu.tld_size+1
host_name = @env['HTTP_HOST'].split('.')[-tld_size,tld_size].join('.')
ActionController::Base.session = { :domain => ".#{host_name}" }
end
before_dispatch :set_session_domain
end
end
Однако приведенный выше код не работает.
Вы сделали что -то подобное успешно или есть идеи, где может быть проблема/решение?
Заранее спасибо за ваше время
Решение
Использование ActionController :: Base.session не будет работать, потому что он используется только при инициализации промежуточного программного обеспечения для работы с сеансами, поэтому только при загрузке вашего приложения. Чтобы сделать вышеуказанный код работать, вы должны использовать
@env['rack.session.options']
Посмотрите здесь на пример: