使用 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/