在Rails的某些子域之间共享会话?

时间:2019-03-28 08:10:19

标签: ruby-on-rails wildcard-subdomain

是否可以为某些特殊子域共享会话?例如,我有一些子域:

  • admin.example.com
  • manager.example.com
  • user.example.com

和带有正则表达式的动态子域:user.*.example.com(user.sub1.example.com)

用户通过user.example.com登录=>在user.*.example.com上自动登录但未登录admin.example.com

我该怎么做?

2 个答案:

答案 0 :(得分:0)

将此添加到您的/config/initilizers/session_store.rb文件中:

AppName::Application.config.session_store :cookie_store, key: '_application_devise_session', domain: :all

“域:全部”为在该会话期间访问的所有不同子域创建一个cookie(并确保它们在请求之间传递)。如果未传递任何域参数,则意味着将为在同一会话中访问的每个不同域创建一个新的Cookie,而旧域将被丢弃。

最终,该表达式中的tld_length(顶级域长度)。例如,默认的tld_length为1,而manager.example.come的tld_length为2,而127.0.0.1.example.com的tld_length为5。因此,我在session_store.rb文件中在example.com上正在开发的子域中的内容以及生产中其他任何东西都在下面。

AppName::Application.config.session_store :cookie_store, key: '_application_devise_session', domain: :all, tld_length: 2

要按环境配置,可以使用以下命令:

Rails.application.config.session_store :cookie_store, key: '_my_app_session', domain: {
  production: '.example.com',
  development: '.example.dev'
}.fetch(Rails.env.to_sym, :all)

来源:https://github.com/plataformatec/devise/wiki/How-To:-Use-subdomains

答案 1 :(得分:0)

https://www.botreetechnologies.com/blog/how-to-share-session-between-rails-4-applications上查看解决方案

博客讨论了Rails 4,但是该解决方案不仅适用于Rails的任何版本,而且适用于任何Rack application