アプリで現在ログインしているユーザーの一覧を表示したい。Laravel Authメソッドを使いたい。API を見ていますが、そのようなものは見つかりません。
おそらく、セッション ストアをループして、それをユーザー ID と照合する必要があります。私は正しいですか?
更新: 言い忘れましたが、セッションを DB に保存しています。
アプリで現在ログインしているユーザーの一覧を表示したい。Laravel Authメソッドを使いたい。API を見ていますが、そのようなものは見つかりません。
おそらく、セッション ストアをループして、それをユーザー ID と照合する必要があります。私は正しいですか?
更新: 言い忘れましたが、セッションを DB に保存しています。
「現在ログイン中」は、単純な古いセッションでは実行できないことです。理由を説明しましょう:
セッションは、サーバー側に保存され、Cookie を介してユーザーに割り当てられる一連のデータです。その Cookie はユーザーのブラウザーに残るため、セッションがアクティブに保たれます。セッションは、ユーザーがログインしなくても、数か月間「有効」なままにすることができます。
ただし、データベースにセッションを保存することは可能です。
ご覧のとおり、Laravel は というフィールドを保持してlast_activity
おり、そのフィールドを介して、過去 15 分間 (または別のものと呼びます) 内にアクティビティがあったすべてのセッションを取得できるはずです。
これらのレコードを取得すると、data
フィールドはセッション データのシリアル化された表現になります。unserialize($session_record->data)
ユーザーIDを取得できます。
Auth ドライバーによっては、セッションのユーザー ID の名前が異なる場合があります。
eloquent_login
.fluent_login
。Custom\AuthClass
の場合、それは呼ばれるべきcustom_authclass_login
です。最初に、ログインしたユーザーの ID が挿入されるテーブルを作成します
Schema::create('active_users', function(Blueprint $table)
{
$table->increments('id')->unsigned();
$table->integer('user_id')->unsigned();
$table->foreign('user_id')->references('id')->on('users')
->onUpdate('cascade')->onDelete('cascade');
$table->timestamps();
});
次に、ログイン中にコントローラーにデータを挿入します
if (Auth::attempt($credentials)) {
DB::table('active_users')->insert(array('user_id' => Auth::id()));
}
ログアウト中にデータを削除する
DB::table('active_users')->where('user_id', '=', Auth::id())->delete();
ビューでオンライン ユーザー リストを印刷する
<ul><strong>Online Users</strong>
<?php $online_users = DB::table('active_users')->where('user_id','!=',Auth::id())->get(); ?>
@foreach($online_users as $online_user)
<li>{{User::find($online_user->user_id)->first_name}}</li>
@endforeach
</ul>