【发布时间】:2022-03-05 05:30:16
【问题描述】:
我是 Rails 新手,我正在关注 Michael Hartl 的 Rails 教程,所以我的代码大部分是从那里借来的。这是场景:
我使用Computer A 登录我的网站。然后我使用Computer B 使用相同的用户ID 登录该站点。当我使用Computer A 退出站点时,Computer B 仍然处于登录状态,并且仍然可以执行操作。出于安全原因,我希望Computer B 在Computer A 注销后强制重新登录。是否有一种简单的方法可以在注销时使给定用户的所有会话无效?如果您有一些示例代码,将不胜感激。
我还了解到,在注销时使用 reset_session 是最佳做法。但是,我无法确定您应该在注销用户之前还是之后使用reset_session?
这是来自我的会话控制器:
def destroy
log_out if logged_in?
# Reset session to prevent session fixation vulnerability
reset_session
flash[:info] = "You are now logged out"
redirect_to root_url
end
这是来自我的会话助手:
# Forgets a persistent session
def forget(user)
user.forget
cookies.delete(:user_id)
cookies.delete(:remember_token)
end
# Logs out the current user
def log_out
forget(current_user)
session.delete(:user_id)
@current_user = nil
end
【问题讨论】:
标签: ruby-on-rails session-cookies