繁体   English   中英

Rails和Authlogic。 显示当前登录的用户

[英]Rails and Authlogic. Show currently logged in users

我想拥有当前登录用户的列表。

此代码不起作用:

<% UserSession.all.each do |user_session| %>

<% end %>

@ syed-aslam有一个很好的解决方案,但你可以让Authlogic完成工作。 查看模块Authlogic :: ActsAsAuthentic :: LoggedInStatus ,它定义了两个范围: logged_inlogged_out

您的代码变为:

<% User.logged_in.each do |user| %>

<% end %>

PS我通常会链接到RDoc而不是源代码,但RDoc目前似乎有问题。

Authlogic为您提供了各种自动列,您不需要自己更新或维护,它们由Authlogic本身的实际代码流维护。 这些字段可以包含一些基本功能相关的问题,例如登录尝试的次数,尝试的IP地址,甚至是用户上次登录时的IP地址。有趣。

帮助我们找到谁可能在线的神奇专栏是名为last_request_on的魔术专栏,它基本上表明用户最后一次向您的应用程序发出请求的时间。

为了做出更准确的选择,我们需要的第二个参数是名为logged_in_timeout的配置选项,它设置过期后过期的超时,默认情况下它将在10分钟后过期。

所以,如果您将会话到期时间设置为30分钟:

class User << ActiveRecord::Base
  acts_as_authentic do |c|
    c.logged_in_timeout 30.minutes
  end
end

搜索这些用户非常简单:

module OnlineUsers
  def count_online_users
    User.count(:conditions => ["last_request_at > ?", 30.minutes.ago])
  end
end

为什么不在用户模型中创建名为currently_active的字段,并在创建会话后将其更新为true,并在会话销毁后更新为false。

然后,您可以调用User.where(currently_active: true)为您提供在线用户。

您无法为所有用户获取UserSession,每次用户发送请求时都会创建UserSession,并且不会在请求之间记住。

但是,您可以显示在某段时间内登录的用户(如果您在每次登录时更新了last_logged_in列)

Logged in last 15 minutes:
<% User.find("last_logged_in < ?", 15.minutes.ago ).each do |user| %>

我在UserSession模型中编写了after_create和before_destroy回调。 在after_create回调中,我写了用户登录到文本文件(self.user.id)的用户ID,在before_create回调中我删除了相同的用户ID。 为了检查用户的活动,我阅读了文本文件并检查了该文件中是否存在用户ID。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM