在两个rails 4之间共享会话与不同子域的应用程序

时间:2016-03-07 11:16:07

标签: ruby-on-rails-4 devise single-sign-on

我在共享父域example.compdf.example.comstudio.example.com)上运行了两个rails 4应用程序。应用程序部署在AWS上,并将会话存储在共享的Memcached中。

studio.example.com的网页上,pdf.example.com的{​​{1}}页面会加载到iframe,覆盖整个可见区域。现在,当用户与iframe内容进行交互时,studio.example.com中创建的会话应该重置,因为在{pdmp.example.com`页面中studio.example.com不应该发生超时。

studio.example.com应用程序使用devise进行身份验证。

以下是用于在studio.example.com

中的memcached中存储会话的配置

配置/初始化/ session_store.rb

Rails.application.config.session_store ActionDispatch::Session::CacheStore, :expire_after => 30.minutes

配置/环境/ production.rb 配置/环境/ development.rb

config.cache_store = :dalli_store

有很多资源(下面列出的很少)解决了这种情况,但所有资源都在使用CookieStoreCacheStore的哪种配置会有所不同?

  1. http://dev.mikamai.com/post/75476602797/sharing-session-between-your-rails-4x-app-and
  2. http://excid3.com/blog/sharing-a-devise-user-session-across-subdomains-with-rails-3/
  3. https://robots.thoughtbot.com/how-to-share-a-session-between-sinatra-and-rails
  4. 修改 前面已经讨论过here确切的场景。

1 个答案:

答案 0 :(得分:2)

http://dev.mikamai.com/post/75476602797/sharing-session-between-your-rails-4x-app-and中建议的解决方案有效。

在两个应用程序中都执行以下操作

  1. 在两个应用程序中设置相同的secret_key_base
  2. session_store.rb中配置相同的密钥和域 Rails.application.config.session_store ActionDispatch::Session::CacheStore, :expire_after => 30.minutes, key: '_common_key', domain: ".example.com"

  3. production.rb Dalli::ElastiCache.new('tripartite.q1ssrz.cfg.usw2.cache.amazonaws.com:11211) config.cache_store = :dalli_store, elasticache.servers

  4. 中启用dalli缓存