Devise on Railsを使用して、現在アクティブなセッションを持っているすべてのユーザー、つまり現在ログインしているユーザーを一覧表示する方法はありますか?
https://github.com/ctide/devise_lastseenable
私が書いたこの宝石を使用して、ユーザーの「last_seen」タイムスタンプを保存できます。そこから、過去5分間または10分間にlast_seenであったユーザーを表示するのは非常に簡単です。
ApplicationControllerにafter_filterを追加するだけです
after_filter :user_activity
private
def user_activity
current_user.try :touch
end
次に、ユーザーモデルにオンラインで追加しますか?方法
def online?
updated_at > 10.minutes.ago
end
また、スコープを作成できます
scope :online, lambda{ where("updated_at > ?", 10.minutes.ago) }
あなたはすべてのデータベースへの旅行をすることによって悩まされている場合。シングル。 http。リクエスト。ユーザーがオンラインであると想定できる小さなウィンドウのみが表示されます。別の解決策があります。
Websocketとredisを使用すると、コストのかかるディスクへの書き込みを行わなくても、ミリ秒までユーザーのオンラインステータスを確実に取得できます。残念ながら、それはかなり多くの作業を必要とし、2つの追加の依存関係がありますが、もし誰かが興味があれば、私はここでかなり詳細な書き込みをしました:
私はこれの別のバージョンを実装したばかりで、それが他の誰かを助ける場合に備えて共有したいと思いました。
Usersテーブルにlast_sign_out_at
列を追加し、Deviseセッションコントローラをサブクラス化するだけで、セッションが破棄された(ユーザーがサインアウトした)ときにdestroyメソッドをオーバーライドして設定できます。
# app/controllers
class SessionsController < Devise::SessionsController
def destroy
current_user.update_attribute(:last_sign_out_at, Time.now)
super
end
end
そして、私のUserモデルには、ユーザーがオンラインかどうかを確認する方法があります。
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
また、ルートで新しいセッションコントローラを使用するようにDeviseに指示する必要があります。
アクティブレコードセッションストアを使用して、現在アクティブなセッションを一覧表示できます。 githubアプリのページ https://github.com/mohanraj-ramanujam/online-users をご覧ください。