更改Rails会话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'
如果我单独做这个改变。 返回该站点的现有登录用户最终将获得2个_boundless_session
cookie,一个使用domain _boundless_session
,另一个使用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更新到更通用的域之后注销。