Подтвердить что ты не робот

Rails - несколько доменов верхнего уровня и один сеанс/файл cookie

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

Я понимаю, что это нужно установить в 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].

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

4b9b3361

Ответ 1

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

EDIT: сеансы полагаются на дескриптор, специфичный для клиента, который хранится в файле cookie, поэтому сеансы также не работают в междоменном режиме.

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

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

Ответ 2

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

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

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

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

Ответ 3

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

Ответ 4

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

Ответ 5

Оба Keltia и zuk правы, Ответ - rubyCAS. Мы делаем эту интеграцию и позволяем

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

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

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

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

веселит, Sameera