Laravel,获取当前登录的用户

时间:2013-03-26 08:05:36

标签: authentication laravel

我想在应用中显示当前登录用户的列表。我想使用Laravel Auth方法。我正在看API,我找不到类似的东西。

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

更新:忘记提及,我将会话存储在数据库中。

3 个答案:

答案 0 :(得分:21)

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

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

但是,可以store sessions on database

正如您所看到的,Laravel保留了一个名为last_activity的字段,通过该字段,您应该能够检索在过去15分钟内有活动的所有会话(或其他内容,您可以调用它)。

检索这些记录时,data字段是会话数据的序列化表示。您可以unserialize($session_record->data)并检索用户ID。

根据您的Auth驱动程序,会话的用户ID可能具有不同的名称:

  • 对于雄辩的驱动程序,它应该是eloquent_login
  • 对于流利的司机fluent_login
  • 对于Custom\AuthClass,应将其称为custom_authclass_login

答案 1 :(得分:0)

假设来自登录用户的所有http请求都通过了auth中间件,我们可以像下面这样重写terminate函数:

public function terminate($request, $response)
{
    Auth::user()->save();
}

然后,像User::where('updated_at', '>', Carbon::now()->subMinutes(12))->get();这样的查询将带入所有已登录用户,其中12是会话的生存期。

当然,对于实时而言,我们应该每5秒使用ajax次调用,或者通过pusher或其他方式使用网络套接字。

答案 2 :(得分:-3)

首先创建一个表格,其中将插入登录用户的ID

Validate(MyBusinessObject obj)

然后在你的控制器中登录时插入数据

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();