跨不同子域的rails应用程序共享会话

我正在尝试为example.com的不同子域托管的多个rails(v3.2)应用实施单点登录解决方案

一个应用程序用作身份提供程序,使用devise进行身份validation,并位于users.example.com其他应用程序依赖身份提供程序进行身份validation,使用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/

我有它工作正常,但问题仍然是会话没有共享所以在我登录身份提供商后,我仍然需要从每个其他应用程序打电话进行身份validation,我需要这个是无形的用户。

我尝试在secret_token.rb使用相同的秘密令牌,在session_store.rb使用相同的会话密钥,并且:domain =>:all(也尝试’.example.com’和’example.com’作为值)。 仍然没有运气。

执行上述操作后,我在session.inspect中看到,在登录身份提供程序后,会填充会话变量“warden.user.user.key”。 当我立即转到app1.example.com上的应用程序时,session.inspect显示相同的session_id和_csrf_token,但现在缺少“warden.user.user.key”变量。

我觉得我错过了一些愚蠢的东西……任何想法可能是什么?

我认为还有一个问题是如何让单个cookie在可以回答你的子域之间工作:

https://stackoverflow.com/a/10403338/2573896

此外,我可以想象使用带有dalli和memcached的memcached群集作为会话存储也可以:

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

为了您的应用程序,第一个解决方案更有意义。