rails hacer español current_user create como ruby-on-rails-3 devise

ruby-on-rails-3 - hacer - devise roles



"Quién está en línea" usando Devise in Rails (5)

Usando Devise on Rails, ¿hay alguna manera de enumerar todos los usuarios que actualmente tienen sesiones activas, es decir, los usuarios que están actualmente conectados?

PD. Estoy buscando una solución sólida, no algo simplista como las de esta pregunta


Acabo de implementar otra versión de esto y pensé que lo compartiría en caso de que ayudara a alguien más.

Acabo de agregar una columna last_sign_out_at a mi tabla Users y luego subclasé el controlador de sesiones de Devise para poder anular el método destroy para configurarlo cuando la sesión se destruye (el usuario last_sign_out_at la sesión):

# app/controllers class SessionsController < Devise::SessionsController def destroy current_user.update_attribute(:last_sign_out_at, Time.now) super end end

Y luego en mi modelo de Usuario tengo un método para verificar si el usuario está en línea:

class User < ActiveRecord::Base def online? if current_sign_in_at.present? last_sign_out_at.present? ? current_sign_in_at > last_sign_out_at : true else false end end end

También debes decirle a Devise que use el nuevo controlador de Sesiones en tus rutas.



Si le molesta hacer un viaje a la base de datos en cada uno. soltero. http solicitud. solo para tener una ventana pequeña donde se puede suponer que un usuario está en línea; Tengo una solución alternativa.

Al usar websockets y redis, es posible obtener de manera confiable el estado en línea de un usuario hasta en milisegundos sin hacer un millardo de costosas escrituras en el disco. Desafortunadamente, requiere un poco más de trabajo y tiene dos dependencias adicionales, pero si alguien está interesado, hice una escritura bastante detallada aquí:

¿Cómo puedo saber si un usuario está en línea?


Simplemente agregue after_filter en ApplicationController

after_filter :user_activity private def user_activity current_user.try :touch end

Luego, en el modelo de usuario, ¿agregar en línea? método

def online? updated_at > 10.minutes.ago end

También puedes crear alcance

scope :online, lambda{ where("updated_at > ?", 10.minutes.ago) }


https://github.com/ctide/devise_lastseenable

Puedes usar esta gema que escribí para almacenar la marca de tiempo ''last_seen'' de un usuario. A partir de ahí, es bastante trivial mostrar los usuarios que fueron vistos por última vez en los últimos 5 o 10 minutos.