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]
.
Любая помощь очень ценится.
Ответы
Ответ 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