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

Совместное использование сеансов через rails-приложения на разных поддоменах

Я пытаюсь реализовать одноразовое решение для нескольких рельсов (v3.2), размещенных в разных поддоменах example.com

Одно приложение служит поставщиком удостоверений, использует devess для auth и сидит на users.example.com Другие приложения полагаются на поставщик удостоверений для аутентификации, используют devise + omniauth, с доменами [app1.example.com, app2.example.com и example.com]. Эта запись в блоге вдохновила большую часть моей реализации: http://blog.joshsoftware.com/2010/12/16/multiple-applications-with-devise-omniauth-and-single-sign-on/

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

Я попытался использовать один и тот же секретный токен в secret_token.rb, тот же ключ сеанса на session_store.rb и: domain = > : all (также были использованы ".example.com" и "example.com" в качестве значений). Еще не повезло.

Выполняя вышеизложенное, я вижу в сеансе. Обратите внимание, что после входа в систему поставщика идентификаторов заполняется переменная сеанса "warden.user.user.key". Когда я сразу же перехожу в приложение на app1.example.com, session.inspect показывает те же session_id и _csrf_token, но теперь отсутствует переменная "warden.user.user.key".

Я чувствую, что мне не хватает чего-то глупого.. Любые идеи, что это может быть?

4b9b3361

Ответ 1

Я думаю, что есть еще один вопрос о том, чтобы один cookie работал по субдоменам, которые ответили бы на ваши вопросы:

fooobar.com/info/73526/...

Кроме того, я могу представить, что использование кластера memcached с dalli и memcached в качестве хранилища сеансов также будет работать:

http://awesomerails.wordpress.com/2011/08/23/rails-3-memcached-session-store/

Для целей вашего приложения первое решение имеет больше смысла.