Rails и Authlogic.Показать зарегистрированных пользователей - PullRequest
4 голосов
/ 18 февраля 2011

Я хотел бы получить список зарегистрированных пользователей.

Этот код не работает:

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

<% end %>

Ответы [ 5 ]

5 голосов
/ 16 апреля 2013

@ syed-aslam имеет хорошее решение, но вы можете просто позволить Authlogic сделать всю работу.Проверьте модуль Authlogic :: ActsAsAuthentic :: LoggedInStatus , который определяет две области: logged_in, logged_out

Ваш код становится:

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

<% end %>

PS Iобычно ссылается на RDoc вместо исходного кода, но RDoc, похоже, имеет проблемы в данный момент.

4 голосов
/ 18 февраля 2011

Authlogic предоставляет вам все виды автоматических столбцов, которые вам на самом деле не нужно обновлять или поддерживать самостоятельно, они поддерживаются фактическим потоком кода самой Authlogic. Эти поля могут содержать некоторые основные проблемы, связанные с функциональностью, такие как количество попыток входа в систему, IP-адрес, с которого была предпринята попытка, или даже какой IP-адрес был в последний раз при входе пользователя в систему. Fun.

Волшебная колонка, которая поможет нам определить, кто, вероятно, находится в сети, - это колонка 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
1 голос
/ 12 августа 2016

Почему бы не создать поле с именем currently_active в пользовательской модели и обновить его до true после создания сеанса, а затем обновить до false после завершения сеанса.

Затем можно вызвать User.where(currently_active: true)дает пользователям, которые онлайн.

0 голосов
/ 12 декабря 2012

Я написал колбэки after_create и before_destroy в модели UserSession.В обратном вызове after_create я записал идентификатор пользователя, вошедшего в систему, в текстовый файл (self.user.id), а в обратном вызове before_create я удалил его.Чтобы проверить активность пользователя, я прочитал текстовый файл и проверил наличие идентификатора пользователя в этом файле.

0 голосов
/ 18 февраля 2011

Вы не можете получить UserSession для всех пользователей, UserSession создается каждый раз, когда пользователь отправляет запрос, и не запоминается между запросами.

Однако вы можете показать пользователей, которые вошли в какой-то период времени (если вы обновляете столбец last_logged_in при каждом входе в систему)

Logged in last 15 minutes:
<% User.find("last_logged_in < ?", 15.minutes.ago ).each do |user| %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...