1

我有 2 个 ruby​​ rails 应用程序,每个都有一个用于身份验证的设计 gem,我的目标是使用共享会话实现简单的 SSO(单点注销)。

其中一个public.admin.comprivate.admin.com 我正在使用以下配置:

session_store.rb

Rails.application.config.session_store :cookie_store, key: '_shared_admin_session', domain: '.admin.com', tld_length: 2

配置/secrets.yml

我也在两个应用程序中使用相同的secret_key_base

设计.rb

config.stretches = 1

config.pepper = ''

应用程序.rb

config.action_dispatch.cookies_serializer = :hybrid

我可以登录其中一个,一旦我打开另一个域,会话就会打开,并且打开的Completed 401 Unauthorized会话关闭并从第一个域注销。

我尝试过使用domain: 'admin.com', domain: :all,and ..session_store :redis_store..,但总是得到相同的结果。

谁能帮我找到问题,或者提出更好的解决方案,我将不胜感激。

4

2 回答 2

2

当您想在域之间共享会话时,您需要编辑config/initializers/session_store.rb文件,使其如下所示:

APPNAMEGOESHERE::Application.config.session_store :cookie_store, :key => '_tourlyapp_session', :domain => "your_domain_name.com"

这里的诀窍是:domain选项。它的作用是设置 TLD(顶级域)的级别,并告诉 Rails 域的长度。您要在这里注意的部分是,如果您domain: :all在某些地方推荐设置 like,除非您使用 localhost,否则它根本不起作用。:all 默认的 TLD 长度为 1,这意味着如果您使用 Pow (myapp.dev) 进行测试,它也不会工作,因为这是长度为 2 的 TLD。

我希望这可以帮助你

于 2018-01-03T18:39:42.500 回答
0

我发现了问题,很简单。

问题在于使用 2 个不同的数据库,统一管理表后一切正常。

于 2018-01-04T10:35:39.967 回答