[英]Rails and Authlogic. Show currently logged in users
我想拥有当前登录用户的列表。
此代码不起作用:
<% UserSession.all.each do |user_session| %>
<% end %>
@ syed-aslam有一个很好的解决方案,但你可以让Authlogic完成工作。 查看模块Authlogic :: ActsAsAuthentic :: LoggedInStatus ,它定义了两个范围: logged_in
, logged_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.