ruby-on-rails-4 - 如何使所有单个用户 session 无效?

标签 ruby-on-rails-4 devise

使用 devise,用户在公共(public)计算机上登录,但他们忘记了注销。

稍后,我们要确保 session 无效,以便将浏览器重定向到登录页面。

我怎样才能做到这一点?

我知道我可以使所有用户的 all session 无效,但我怎么能为单个用户执行此操作(因此它不会影响所有用户)。

如果您更改密码,我读过一些关于密码盐更改的内容,这可以应用于这个问题吗?

最佳答案

这对我有用。

我给每个用户一个 session_validity_token,并在他们登录时将其存储在他们的 session 数据中。每次他们访问服务器时都会检查它。要强制所有浏览器上的所有 session 都必须重新登录,我只需清除 token 即可。

$ rails g migration add_session_validity_token_to_users session_validity_token
$ rake db:migrate

config/initializers/devise.rb:

Warden::Manager.after_set_user except: :fetch do |user, warden, opts|
  user.update_attribute(:session_validity_token, Devise.friendly_token) if user.session_validity_token.nil?
  warden.raw_session["validity_token"] = user.session_validity_token
end

Warden::Manager.after_fetch do |user, warden, opts|
  unless user.session_validity_token == warden.raw_session["validity_token"]
    warden.logout
  end
end

app/models/user.rb

def force_logout
  update_attribute(:session_validity_token, nil)
end

关于ruby-on-rails-4 - 如何使所有单个用户 session 无效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29208062/

相关文章:

ruby - 无法在 OS X 10.6 Snow Leopard 服务器上安装 mysql gem

ruby-on-rails - 如何在 Ruby on Rails 中不使用 devise 添加新的管理员用户

ruby-on-rails - 登录失败并显示闪消息后设计重定向

ruby-on-rails-4 - 如何在 ruby​​ on rails 4 中使用 secrets.yml 将密码存储在 database.yml 中

ruby-on-rails - Rspec 跳过 Controller 中的设计操作 - sign_in_and_redirect

ruby-on-rails - 使用嵌套表单时无法批量分配 protected 属性设计错误

ruby-on-rails - 如何在设计authenticate_user中删除html重定向

ruby-on-rails - 寻找返回关系中对象顺序号的 rails/ruby 方法

ruby-on-rails - 期望输入结束的语法错误

ruby-on-rails-4 - link_to url helper 在 Rails 4 的 render_to_string 中不起作用