Как я могу поделиться сессиями пользователей между несколькими доменами, используя Rails?
-
07-07-2019 - |
Вопрос
Кто-нибудь знает о каких-либо драгоценных камнях, учебных пособиях или решениях, позволяющих пользователю входить на веб-сайт в одном домене и автоматически предоставляющим доступ к другим партнерским доменам в том же сеансе? Р>
У меня запущены два приложения 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 или другими провайдерами аутентификации.