我有2个ruby rails应用程序,每个都有一个用于身份验证的设计宝石,我的目标是使用共享会话实现简单的SSO(单点登出)。
其中一位有public.admin.com
,另一位有private.admin.com
我使用以下配置:
Rails.application.config.session_store :cookie_store, key: '_shared_admin_session', domain: '.admin.com', tld_length: 2
我在两个应用程序中也使用相同的secret_key_base
值
config.stretches = 1
config.pepper = ''
config.action_dispatch.cookies_serializer = :hybrid
我可以登录其中一个并且会话打开后,一旦我打开另一个域Completed 401 Unauthorized
被返回并且opend会话关闭并从第一个域退出。
我尝试过使用domain: 'admin.com'
,domain: :all
和..session_store :redis_store..
,但始终使用相同的结果。
任何人都可以帮我找到问题,或建议更好的解决方案,我会很感激。
答案 0 :(得分:1)
如果您想在域之间共享会话,请编辑 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
之类的建议,除非您使用的是localhost,否则它将无法使用。 :所有默认值都是TLD长度为1,这意味着如果您使用Pow(myapp.dev)进行测试,它将无法正常工作,因为这是一个长度为2的顶级域名。
我希望这可以帮助你
答案 1 :(得分:0)
我发现了问题,很简单。
问题在于使用2个不同的DB,在统一管理表之后工作正常。