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

Ruby on rails Rails和Authlogic。显示当前登录的用户,ruby-on-rails,Ruby On Rails,我想要当前登录用户的列表 此代码不起作用: <% UserSession.all.each do |user_session| %> <% end %> 您无法为所有用户获取UserSession,UserSession是在用户每次发送请求时创建的,在请求之间不会被记住 但是,您可以显示在某段时间内登录的用户(如果您上次登录列在每次登录时都会更新) 在过去15分钟内登录: Authlogic为您提供了所有类型的自动列,您实际上不需要自己更新或维护这些列,它们由Auth

我想要当前登录用户的列表

此代码不起作用:

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

<% end %>

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

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

在过去15分钟内登录:

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

在UserSession模型中,我在创建回调之后和销毁回调之前编写了。
在创建回调后,我将登录到文本文件(self.user.id)的用户的用户id写入,在创建回调前,我删除了相同的用户id。为了检查用户的活动,我阅读了文本文件并检查了该文件中是否存在用户id。

@syed aslam有一个很好的解决方案,但您可以让Authlogic来完成这项工作。查看定义两个范围的模块:
logged\u in
logged\u out

您的代码变成:

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

<% end %>


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

为什么不在用户模型中创建一个名为“当前活动”的字段,并在创建会话后将其更新为true,在销毁会话后将其更新为false


然后您可以调用
User。where(当前处于活动状态:true)
为您提供在线的用户。

在请求之间会记住会话,这就是我们使用它的原因。
module OnlineUsers
  def count_online_users
    User.count(:conditions => ["last_request_at > ?", 30.minutes.ago])
  end
end
<% User.logged_in.each do |user| %>

<% end %>