【问题标题】:Change Rails session cookie domain without logging users out在不注销用户的情况下更改 Rails 会话 cookie 域
【发布时间】:2015-10-14 03:26:56
【问题描述】:

我正在使用 Rails 4.2.2(带有 Devise 3.4.1)并将 cookie_store 域从 www.boundless.dev 更改为 .boundless.dev 以便在我们所有的子域之间共享相同的会话(单号-on)。

Boundless::Application.config.session_store :cookie_store, key: '_boundless_session', domain: '.boundless.dev'

如果我一个人做这个改变。返回站点的现有登录用户最终将获得 2 个_boundless_session cookie,一个具有域 boundless.dev,另一个具有 www.boundless.dev。不知何故,这使得退出是不可能的。

是否可以在不将所有用户登出站点的情况下进行此更改?

我认为我可以在我的 ApplicationController 中编写一个 before_filter 方法来删​​除会话 cookie 并将其替换为 .boundless.dev 中的新 cookie,但它不起作用,我怀疑它与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

【问题讨论】:

  • 跟我面临的问题一模一样。

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-28
    • 2019-10-11
    • 2017-08-03
    • 2016-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多