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

问题描述 投票:0回答:2

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

  • 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

我怎样才能做到这一点?

ruby-on-rails wildcard-subdomain
2个回答
0
投票

在/config/initilizers/session_store.rb文件中添加:

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

'domain:all'为在该会话期间访问的所有不同子域创建一个cookie(并确保它们在请求之间传递)。如果没有传递域参数,则意味着为在同一会话中访问的每个不同域创建新cookie,旧的cookie被丢弃。

最终是该表达式中的tld_length(顶级域长度)。默认tld_length为1,而manager.example.come的tld_length为2,而127.0.0.1.example.com的tld_length为5。那么我在开发中的example.com上的子域的session_store.rb文件中以及生产中的其他内容如下所示。

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


0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.