Ruby on rails 在子域之间共享会话,设计身份验证已完成

Ruby on rails 在子域之间共享会话,设计身份验证已完成,ruby-on-rails,devise,session-cookies,session-store,Ruby On Rails,Devise,Session Cookies,Session Store,我有2个ruby rails应用程序,每个应用程序都有一个用于身份验证的Desive gem,我的目标是使用共享会话实现简单的SSO(单点注销) 其中一个带有public.admin.com,另一个带有private.admin.com 我正在使用以下配置: session_store.rb config/secrets.yml 我还在两个应用程序中使用相同的secret\u key\u base值 设计 application.rb 我可以登录其中一个域,一旦我打开另一个域,会话就会打开。Co

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

其中一个带有
public.admin.com
,另一个带有
private.admin.com
我正在使用以下配置:

session_store.rb config/secrets.yml 我还在两个应用程序中使用相同的
secret\u key\u base

设计 application.rb 我可以登录其中一个域,一旦我打开另一个域,会话就会打开。
Completed
将返回,opend会话将关闭并从第一个域注销

我尝试过使用
域:“admin.com”
域::all
。会话存储:redis\u存储..
,但结果总是一样的


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

当您想要在域之间共享会话时,您需要做的是编辑您的配置/初始化器/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


我希望这能帮助您解决问题

我发现了问题,很简单


问题在于使用了两个不同的数据库,在统一了管理表之后,一切正常。一个是使用Rails4,另一个是Rails5,我不确定这是问题还是测试问题谢谢你重播,当我打开浏览器cookies时,我可以看到带有键
\u shared\u admin\u session
的cookie映射到两个域选项卡的domain
。admin.com
,因此,我真的不确定会话是否真的共享了一个域(读/写)你可以用
lvh.me:3000
admins.lvh.me:3000
测试它是否能正常工作。收到401个未经授权的rails服务器日志是否正常,rails服务器日志
无法验证CSRF令牌的真实性
有人能回答@Eftikhar吗?因为我有同样的问题你好,maheshwsri先生,你可以查看我添加的注释回答,确保用户从相同的db:表中读取
config.stretches = 1

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