6

アプリで現在ログインしているユーザーの一覧を表示したい。Laravel Authメソッドを使いたい。API を見ていますが、そのようなものは見つかりません。

おそらく、セッション ストアをループして、それをユーザー ID と照合する必要があります。私は正しいですか?

更新: 言い忘れましたが、セッションを DB に保存しています。

4

3 に答える 3

26

「現在ログイン中」は、単純な古いセッションでは実行できないことです。理由を説明しましょう:

セッションは、サーバー側に保存され、Cookie を介してユーザーに割り当てられる一連のデータです。その Cookie はユーザーのブラウザーに残るため、セッションがアクティブに保たれます。セッションは、ユーザーがログインしなくても、数か月間「有効」なままにすることができます。

ただし、データベースにセッションを保存することは可能です。

ご覧のとおり、Laravel は というフィールドを保持してlast_activityおり、そのフィールドを介して、過去 15 分間 (または別のものと呼びます) 内にアクティビティがあったすべてのセッションを取得できるはずです。

これらのレコードを取得すると、dataフィールドはセッション データのシリアル化された表現になります。unserialize($session_record->data)ユーザーIDを取得できます。

Auth ドライバーによっては、セッションのユーザー ID の名前が異なる場合があります。

  • 雄弁なドライバーの場合、それはeloquent_login.
  • 流暢なドライバー向けfluent_login
  • あなたCustom\AuthClassの場合、それは呼ばれるべきcustom_authclass_loginです。
于 2013-03-26T12:11:21.897 に答える
-2

最初に、ログインしたユーザーの 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>
于 2015-06-08T11:30:40.620 に答える