更改 Rails 会话 cookie 域而不注销用户
Change Rails session cookie domain without logging users out
我正在使用 Rails 4.2.2(使用 Devise 3.4.1)并将 cookie_store 域从 www.boundless.dev 更改为 .boundless.dev 以便在我们所有的子域中共享同一个会话(单点登录)。
Boundless::Application.config.session_store :cookie_store, key: '_boundless_session', domain: '.boundless.dev'
如果我一个人做这个改变。 return 到该站点的现有登录用户最终将获得 2 个 _boundless_session
个 cookie,一个域为 boundless.dev,另一个域为 www.boundless.dev。不知何故,这使得注销变得不可能。
是否可以在不让所有用户退出站点的情况下进行此更改?
我认为我可以在我的 ApplicationController 中编写一个方法作为 before_filter
来删除会话 cookie 并将其替换为新的 .boundless.dev,但它没有' 不起作用,我怀疑它与 remember_user_token
cookie 有关。
def update_session_cookie_domain
session_cookie = cookies['_boundless_session']
cookies.delete('_boundless_session', domain: 'www.boundless.dev')
cookies['_boundless_session'] = {
value: session_cookie,
domain: '.boundless.dev'
}
end
我可以通过更改用于会话的 cookie 名称来解决这个问题。
原来的配置是:
Boundless::Application.config.session_store :cookie_store, key: '_boundless_session', domain: 'www.boundless.dev'
然后我将其更改为:
Boundless::Application.config.session_store :cookie_store, key: '_boundless_session_NEW', domain: '.boundless.dev'
我希望这会注销用户,但出于某种我不太明白的原因,它并没有。
不幸的是,我还没有找到清除旧 _boundless_session
cookie 的方法,但至少现在我可以在将会话 cookie 更新到更通用的域后注销。
我正在使用 Rails 4.2.2(使用 Devise 3.4.1)并将 cookie_store 域从 www.boundless.dev 更改为 .boundless.dev 以便在我们所有的子域中共享同一个会话(单点登录)。
Boundless::Application.config.session_store :cookie_store, key: '_boundless_session', domain: '.boundless.dev'
如果我一个人做这个改变。 return 到该站点的现有登录用户最终将获得 2 个 _boundless_session
个 cookie,一个域为 boundless.dev,另一个域为 www.boundless.dev。不知何故,这使得注销变得不可能。
是否可以在不让所有用户退出站点的情况下进行此更改?
我认为我可以在我的 ApplicationController 中编写一个方法作为 before_filter
来删除会话 cookie 并将其替换为新的 .boundless.dev,但它没有' 不起作用,我怀疑它与 remember_user_token
cookie 有关。
def update_session_cookie_domain
session_cookie = cookies['_boundless_session']
cookies.delete('_boundless_session', domain: 'www.boundless.dev')
cookies['_boundless_session'] = {
value: session_cookie,
domain: '.boundless.dev'
}
end
我可以通过更改用于会话的 cookie 名称来解决这个问题。
原来的配置是:
Boundless::Application.config.session_store :cookie_store, key: '_boundless_session', domain: 'www.boundless.dev'
然后我将其更改为:
Boundless::Application.config.session_store :cookie_store, key: '_boundless_session_NEW', domain: '.boundless.dev'
我希望这会注销用户,但出于某种我不太明白的原因,它并没有。
不幸的是,我还没有找到清除旧 _boundless_session
cookie 的方法,但至少现在我可以在将会话 cookie 更新到更通用的域后注销。