указать, какие пользователи в настоящее время вошли в систему - PullRequest
0 голосов
/ 25 декабря 2018

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

Я не уверен, как это сделать.Возможно, я мог бы добавить столбец с именем currently_logged_in к моей модели User и установить значение true при создании сеанса, а затем false при уничтожении сеанса пользователя?

class SessionsController < ApplicationController

    def new
    end

    def create
      if user = User.authenticate(params[:email], params[:password])
        session[:user_id] = user.id #session id created off of the 
        redirect_to(session[:intended_url] || user)
        session[:intended_url] = nil #removes url from the sessions 
      else
        flash.now[:error] = "Invalid email/password combination"
        render :new
      end
    end

    def destroy
      session[:user_id] = nil
      redirect_to root_url
    end

end

Модель пользователя

 # tries to find an existing user in the database so that they can be authenticated.
  def self.authenticate(email, password)
      user = User.find_by(email: email) # returns user or nil value
      user && user.authenticate(password) # if user exists validate that password is correct
  end

Ответы [ 2 ]

0 голосов
/ 25 декабря 2018

Для начала нужно найти текущего пользователя на сайте.Вы можете вызвать метод current_user, который находится во вспомогательном приложении, и вы должны отобразить всех текущих пользователей в любом месте.Например,

module ApplicationHelper
 def current_user
  @current_user ||= session[:user_id] && User.find_by_id(session[:user_id])
 end
end

И этот метод вызывается в контроллере сеанса как @current_user.

0 голосов
/ 25 декабря 2018

Это зависит от того, что вы подразумеваете под «в настоящее время на сайте».

Добавление столбца currently_logged_in, как вы описали, работает, если вы хотите отметить пользователей, которые в данный момент вошли в систему. Однако большинство пользователей этого не делаютВыйдите из системы при выходе из веб-сайта в эти дни, чтобы, вероятно, не делать то, что вы хотите.

Лучшим решением было бы добавить столбец last_active_at, который можно обновлять в соответствии с текущим временем, когда пользователь выполняет некоторые действия.действие.Затем определите порог, который имеет смысл для вашего веб-сайта, скажем, 15 минут, и отметьте только пользователей в вашем списке, которые имеют значение last_active_at меньше, чем 15 минут в прошлом.

Предполагая определение "активный"user "для вашего сайта включает в себя попадание в аутентифицированные конечные точки, это будет так же просто, как изменить ваш метод аутентификации на:

def self.authenticate(email, password)
  user = User.find_by(email: email) # returns user or nil value
  if user && user.authenticate(password)
    user.update!(last_active_at: Time.now)     
    true
  else
    false
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...