pet*_*ept 3 devise ruby-on-rails-4
使用设计,用户登录公共计算机,他们忘记注销.
稍后,我们要确保会话无效,以便将浏览器重定向到登录页面.
我怎样才能做到这一点?
我知道我可以使所有用户的所有会话无效,但我怎么能为单个用户执行此操作(因此它不会影响所有用户).
如果您更改密码,我会阅读有关密码盐更改的内容,是否可以应用于此问题?
这对我有用.
我给每个用户一个session_validity_token,并在登录时将其存储在会话数据中.每次访问服务器时都会进行检查.要强制所有浏览器上的所有会话都必须重新登录,我只需清除该令牌即可.
$ rails g migration add_session_validity_token_to_users session_validity_token
$ rake db:migrate
Run Code Online (Sandbox Code Playgroud)
配置/初始化/ 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
Run Code Online (Sandbox Code Playgroud)
应用程序/模型/ user.rb
def force_logout
update_attribute(:session_validity_token, nil)
end
Run Code Online (Sandbox Code Playgroud)