加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails-3.1 – 如何判断给定的Devise用户是否已立即登录

发布时间:2020-12-17 03:59:51 所属栏目:百科 来源:网络整理
导读:在使用Devise的Rails应用程序中,有没有办法判断特定用户现在是否已登录? 我知道视图助手user_signed_in?.我正在寻找的更像是: User.all.each do |user| puts user.signed_in?end 我看到Devise已经向用户添加了current_sign_in_at列.但是当用户注销时,这不
在使用Devise的Rails应用程序中,有没有办法判断特定用户现在是否已登录?

我知道视图助手user_signed_in?.我正在寻找的更像是:

User.all.each do |user|
  puts user.signed_in?
end

我看到Devise已经向用户添加了current_sign_in_at列.但是当用户注销时,这不会设置为NULL,因此我无法测试.

如何检查用户当前是否已登录?

解决方法

您可以将一个before_filter添加到ApplicationController,以在users表的last_request_at字段中设置当前日期/时间,您必须先通过迁移添加该字段.在before_filter调用的方法中,您当然要确保首先验证用户身份.并且您可能希望除了过滤器之外不需要身份验证的操作.

然后,假设您已在用户模型中包含Timeoutable模块,您可以通过这样的调用来查看用户的会话是否是最新的:

user.timedout?(user.last_request_at)

在Timeoutable模块中定义的timedout?(last_access)方法将比较Devise会话超时与上一个请求时间/日期.

作为旁注,如果最后一个last_request_at值大于一分钟(或您选择的任何时间间隔),您可能只想更新last_request_at.否则,如果您的页面通过AJAX进行了大量的控制器调用,那么在一个请求中会有很多不必要的数据库更新.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读