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

3
有没有可能为某些特定子域共享会话?例如,我有一些子域:
  • 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个回答

3
将以下内容添加到您的/config/initializers/session_store.rb文件中:
AppName::Application.config.session_store :cookie_store, key: '_application_devise_session', domain: :all

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

最终的tld_length(顶级域长度)在该表达式中起作用。默认的tld_length是1,而manager.example.com的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

本文介绍如何在Rails应用程序中使用Devise gem和子域名来实现身份验证。该方法可以让用户使用不同的子域名访问同一个站点,并根据子域名来确定其所属的账户。

它将为所有子域(.example.com)发送会话密钥,但出于安全原因,我只想为特定的域名发送会话(user.example.comuser.*.example),这可能吗? - Nguyen Ruby

-1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接