Как я могу поделиться сессиями пользователей между несколькими доменами, используя Rails?

StackOverflow https://stackoverflow.com/questions/274384

Вопрос

Кто-нибудь знает о каких-либо драгоценных камнях, учебных пособиях или решениях, позволяющих пользователю входить на веб-сайт в одном домене и автоматически предоставляющим доступ к другим партнерским доменам в том же сеансе?

У меня запущены два приложения rails, назовем их App-A и App-B. У App-A есть связанная с ним база данных, обеспечивающая регистрацию и вход в систему на App-A.com. Теперь я хотел бы предоставить всем этим пользователям с учетными записями App-A.com доступ к App-B.com, не заставляя их перерегистрировать или вручную входить на App-B.com отдельно.

Заранее спасибо за любую помощь! --Mark

Это было полезно?

Решение

Вы можете установить один и тот же ключ сеанса в обоих приложениях. В appA environment.rb измените ключ сессии, например,

Rails::Initializer.run do |config|
   ...  
 config.action_controller.session = {
   :session_key => '_portal_session',
   :secret      => '72bf006c18d459acf51836d2aea01e0afd0388f860fe4b07a9a57dedd25c631749ba9b65083a85af38bd539cc810e81f559e76d6426c5e77b6064f42e14f7415'
  }
  ...
end

Сделайте то же самое в AppB. (не забудьте использовать тот же секрет)

Теперь у вас есть общие сессии. Допустим, вы используете restfull_authentication, который устанавливает переменную сеанса под названием user_id . Когда вы аутентифицируетесь в appA, он устанавливает user_id в сеансе. Теперь в appB вам просто нужно проверить, существует ли user_id в сеансе.

Это общая схема, вы можете разработать более подробно, используя эту идею.

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top