更改Rails会话cookie域而不记录用户

时间:2015-07-23 17:08:35

标签: ruby-on-rails session cookies devise single-sign-on

我正在使用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.dev,另一个使用www.boundless.dev。不知怎的,这使得登出不可能。

是否可以在不将所有用户从站点中删除的情况下进行此更改?

我认为我能够在我的ApplicationController中编写一个方法作为before_filter来删除会话cookie并将其替换为.boundless.dev中的一个新方法,但它没有&#39工作,我怀疑它与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

1 个答案:

答案 0 :(得分:3)

我能够通过更改用于会话的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更新到更一般的域后退出。