Rails - несколько доменов верхнего уровня и один сеанс / cookie - PullRequest
18 голосов
/ 18 декабря 2008

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

Насколько я понимаю, это нужно установить в environment.rb и вызывается с before_dispatch. Вот что я придумал:

require 'activesupport'
require 'dispatcher'
module ActionController
   class Dispatcher

      def set_session_domain
         ActionController::Base.session_options.update :session_domain => "#{@request.host}"
      end 

      before_dispatch :set_session_domain
   end
end

Однако, кажется, это не работает, когда я пытаюсь вытащить значения от session[:session_domain].

Любая помощь очень ценится.

Ответы [ 5 ]

8 голосов
/ 18 декабря 2008

Это немного сложно. Поскольку файлы cookie могут быть назначены (и извлечены из) только текущему домену (скажем, «forms.example.com») и родительским доменам («.example.com», но не «.com»), но НЕ другим доменам ("othersite.com"), вам придется найти другое решение. Это не имеет ничего общего с Rails, но с тем, как работают куки.

РЕДАКТИРОВАТЬ: Сеансы основаны на специфичном для клиента дескрипторе, хранящемся в файле cookie, поэтому сеансы также не работают в междоменном домене.

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

Если вы ищете более универсальную услугу единого входа, попробуйте реализовать некоторую форму OpenID .

2 голосов
/ 23 мая 2010

Для поддоменов в Rails 2.3

ActionController::Base.session = { :domain => ".mydomain.com" }

Для доменов верхнего уровня попробуйте это промежуточное ПО .

В данный момент я играю с вышеуказанным промежуточным ПО, и оно не совсем работает, как ожидалось. Если вы используете промежуточное ПО, вам не понадобится приведенный выше код, поскольку он также обрабатывает субдомены.

1 голос
/ 23 декабря 2008

Вам, вероятно, понадобится что-то вроде RubyCAS, если вы хотите аутентификацию между доменами независимо от того, являются ли они доменами верхнего уровня или поддоменами.

0 голосов
/ 30 ноября 2009

И Келтиа, и Зук правы, Ответ - rubyCAS, Мы сделали эту интеграцию, и это позволяет

SSI - единый вход Вы входите на один сайт, и вы автоматически подписываетесь на другой

SSO - единый выход Вы выходите из одного сайта и автоматически выходите из другого

Для нас это проверенное и не сложное решение

мы используем его в http://www.cabslk.com и www.ticketslk.com

веселит, Самира

0 голосов
/ 18 декабря 2008

Ваш вопрос не совсем точен, ИМХО. Вам нужен один файл cookie для всех ваших приложений Rails или он находится в контексте одного? Если первое, вы хотите посмотреть на решения, использующие сеансы с поддержкой базы данных или что-то вроде RubyCAS для реализации протокола CAS .

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