Настройка приложения Rails для обработки нескольких поддоменов и нескольких файлов cookie - PullRequest
4 голосов
/ 17 мая 2011

У меня есть приложение rails, которое поддерживает несколько доменов, и каждый домен может иметь несколько поддоменов.

Пользователи, посещающие mydomain1.com, не получают такой же опыт, как mydomain2.com (хотя базовое поведение приложенийто же самое)

Таким образом, если пользователь вошел в mydomain1.com, он не должен входить в mydomain2.com

Если пользователь вошел в france.mydomain1.com, он должен , а затем войти на germany.mydomain1.com

Ранее я справился с этим, установив домен в настройках хранилища сеансов:

MyApp::Application.config.session_store :cookie_store, :key => '_MyApp_session', :domain => APP_CONFIG[:domain]

Я пытаюсь найти лучший способ справиться с этим с несколькими доменами?

Я пытался взломать ActionDispatch::Callback, но запрос там недоступен.

Кто-нибудь может предложить хороший способ поддержки нескольких файлов cookie из одного приложения?

В идеале я хотел бы создать новый файл cookie для каждого субдомена .

Ответы [ 2 ]

5 голосов
/ 17 мая 2011

Вы должны сделать это:

class ActionDispatch::Session::MultiDomainStore < ActionDispatch::Session::CookieStore
  def initialize(app, options = {})       
    super(app, options.merge!(:domain => compute_domain(app)))      
  end

  def compute_domain(app)
    ...
  end
end

MyApp::Application.config.session_store :multi_domain_store, :key => '_MyApp_session'

Т.е. ваш домен должен начинаться с точки.

1 голос
/ 17 мая 2011

Это не должно быть проблемой, так как куки действительны только для одного домена.Вы можете иметь _MyApp_session для example1.com и один для example2.com.Файлы cookie управляются браузером и отправляются на хост только в случае совпадения домена.

Предположим, вы заходите на example1.com и входите в систему, и вы получите файл cookie со значением abcdef123.Затем вы войдете на сайт example2.com и получите другой файл cookie со случайной строкой uvwxyz890.

. Если вы вернетесь на сайт example1.com позже, браузер отправит только файлы cookie, действительные для этого доменаваше приложение.Ваше приложение не должно управлять чем-либо, и вам не нужно ничего взламывать.

...