Authentication Laravel,获取当前登录的用户

Authentication Laravel,获取当前登录的用户,authentication,laravel,Authentication,Laravel,我想在应用程序中显示当前登录用户的列表。我想使用Laravel Auth方法。我正在查看API,但找不到类似的内容 我可能需要遍历会话存储,然后将其与用户ID匹配。我说的对吗 更新:忘了提一下,我正在数据库中存储会话。“当前已登录”是普通旧会话所无法做到的。让我解释一下原因: 会话是存储在服务器端的一组数据,通过cookie分配给用户。该cookie保留在用户浏览器上,因此它使会话保持活动状态。会话可以在用户甚至不登录的情况下保持“活动”数月 但是,有可能 如您所见,Laravel保留了一个名为

我想在应用程序中显示当前登录用户的列表。我想使用Laravel Auth方法。我正在查看API,但找不到类似的内容

我可能需要遍历会话存储,然后将其与用户ID匹配。我说的对吗

更新:忘了提一下,我正在数据库中存储会话。

“当前已登录”是普通旧会话所无法做到的。让我解释一下原因:

会话是存储在服务器端的一组数据,通过cookie分配给用户。该cookie保留在用户浏览器上,因此它使会话保持活动状态。会话可以在用户甚至不登录的情况下保持“活动”数月

但是,有可能

如您所见,Laravel保留了一个名为
last\u activity
的字段,通过该字段,您应该能够检索过去15分钟内有活动的所有会话(或者您称之为其他内容)

检索这些记录时,
数据
字段是会话数据的序列化表示形式。您可以
取消序列化($session\u record->data)
并检索用户id

根据身份验证驱动程序的不同,会话的用户id可能有不同的名称:

  • 对于有口才的驱动程序,它应该是
    有口才的\u登录
  • 对于fluent驱动程序
    fluent\u登录
  • 对于您的
    Custom\AuthClass
    ,它应该被称为
    Custom\u AuthClass\u 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>
    在线用户 @foreach($online_用户作为$online_用户)
  • {{User::find($online_User->User_id)->first_name}
  • @endforeach

假设来自登录用户的所有http请求都通过
auth
中间件,我们可以覆盖
终止
功能,如下所示:

public function terminate($request, $response)
{
    Auth::user()->save();
}
然后是一个类似于
User::where('updated_at','>',Carbon::now()->subMinutes(12))->get()的查询
将为所有已登录的用户提供服务,其中
12
是会话的生存期


当然,对于实时性,我们应该每5秒使用
ajax
调用一次,或者通过
pusher
或其他方式使用websockets。

任务,您能更具体地说明您真正的疑问吗?然后我们可以提供一个更精确的答案。@vfragosp,他毫无疑问,他只是从你翔实的答案中知道了细节,然后说,嗯,这很容易,我知道,为什么要费心呢。忽略他,伙计,你有最好的答案。会话不能在几个月内保持“活动”-
config('session.life')
设置为分钟,默认为120分钟。@YevGeniyafanasysev如果你的
session.life
更改为
86400
minutes会发生什么?它能活60天,不是吗?所以是的,会话可以存活数月。我不使用数据库进行会话,我使用的是Redis。而且我没有上次的活动。我想这就是为什么你可以把会议记录保存几个月的原因。因为没有从数据库中删除过期记录的过程。Redis使用不同的程序进行自我清洁。感谢您提供有关会话数据保存在数据库中的情况的有用详细信息。我现在明白了,我错了。当会话超时时会发生什么?当会话超时时,从active_users表中删除该行。@PankajSuthar如何?(会话超时时,从active_users表中删除该行。)
pusher
+
Webhook
,我的意思是。