gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 09:55:22 26 4
gpt4 key购买 nike

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com