Приложение Nginx + 1 Rails + несколько доменов + 1 сеанс - PullRequest
0 голосов
/ 31 октября 2018

Вот моя ситуация, у меня есть приложение 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"

Должен быть способ сделать это, любой вклад приветствуется!

1 Ответ

0 голосов
/ 06 ноября 2018

Наконец-то решил эту проблему, все мои вещи на Rails были в порядке, проблема была в конфигах Nginx, более конкретно, в том, что основной домен использовал SSL, в то время как другие не были так, я думаю, Nginx не устанавливал куки из соображений безопасности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...