gpt4 book ai didi

authentication - 获取所有连接的用户(Laravel 5)

转载 作者:行者123 更新时间:2023-12-04 08:25:51 29 4
gpt4 key购买 nike

如何显示我家中所有已连接的用户?

最佳答案

这是一种非常基本但希望是检测 Laravel5 应用程序上的 GuestRegistered 用户的有效方法。

第一步

打开文件config/session.php并将驱动程序更改为数据库。

第 2 步

我们需要创建 session 表,因此使用以下 artisan 命令 php artisan session:table 生成迁移文件。

第 3 步

在这个新生成的迁移中,您需要添加一个新的 user_id 列,这样我们就可以将 session 与用户相关联,当然前提是该用户已登录。

打开文件 migrations/xxxx_xx_xx_xxxxxx_create_session_table.php 并在 Schema::create 中添加以下内容:

$t->integer('user_id')->nullable();

这是完整迁移的样子:

<?php

use Illuminate\Database\Migrations\Migration;

class CreateSessionTable extends Migration {

/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('sessions', function($t)
{
$t->string('id')->unique();
$t->text('payload');
$t->integer('last_activity');
$t->integer('user_id')->nullable();
});
}

/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::drop('sessions');
}

}

第四步

运行 composer dump-autoloadphp artisan migrate

注意:如果您没有全局安装 Composer,只需使用 php composer.phar dump-autoload

第 5 步

将 Eloquent 模型作为 Session.php 保存在您的应用程序的某处。

注意:推荐的保存位置是应用程序目录。

第 6 步

现在您只需要知道如何使用它。

...

用法

将以下 Session::updateCurrent(); 放在代码的某处,因为这将确保当前用户的 session 条目得到更新,举个例子,您可以将它放在你的 app/routes.php 文件。

获取所有用户(访客+注册)

$all = Session::all();

如果你需要检查一段时间内所有用户是否在线,比如10分钟,你需要调用activity(:limit)方法,如下所示:

$all = Session::activity(10)->get();

注意:此方法可以与 guests() 和/或 registered() 方法结合使用。

guest 用户

捕获一切

$guests = Session::guests()->get();
Get the # of Guest users

$total = Session::guests()->count();

注册用户

捕获一切

$registered = Session::registered()->get();

foreach ($registered as $online) {
// You can retrieve the user information using something like:
var_dump($online->user->email);
}

获取注册用户数

$total = Session::registered()->count();

Eloquent 模型:

use Carbon\Carbon;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Session;
use Illuminate\Database\Eloquent\Builder;
use Cartalyst\Sentinel\Laravel\Facades\Sentinel;

class Session extends Model
{
/**
* {@inheritdoc}
*/
public $table = 'sessions';

/**
* {@inheritdoc}
*/
public $timestamps = false;

/**
* Returns the user that belongs to this entry.
*
* @return \Cartalyst\Sentinel\Users\EloquentUser
*/
public function user()
{
return $this->belongsTo('Cartalyst\Sentinel\Users\EloquentUser');
}

/**
* Returns all the users within the given activity.
*
* @param \Illuminate\Database\Eloquent\Builder $query
* @param int $limit
* @return \Illuminate\Database\Eloquent\Builder
*/
public function scopeActivity($query, $limit = 10)
{
$lastActivity = strtotime(Carbon::now()->subMinutes($limit));

return $query->where('last_activity', '>=', $lastActivity);
}

/**
* Returns all the guest users.
*
* @param \Illuminate\Database\Eloquent\Builder $query
* @return \Illuminate\Database\Eloquent\Builder
*/
public function scopeGuests(Builder $query)
{
return $query->whereNull('user_id');
}

/**
* Returns all the registered users.
*
* @param \Illuminate\Database\Eloquent\Builder $query
* @return \Illuminate\Database\Eloquent\Builder
*/
public function scopeRegistered(Builder $query)
{
return $query->whereNotNull('user_id')->with('user');
}

/**
* Updates the session of the current user.
*
* @param \Illuminate\Database\Eloquent\Builder $query
* @return \Illuminate\Database\Eloquent\Builder
*/
public function scopeUpdateCurrent(Builder $query)
{
$user = Sentinel::check();

return $query->where('id', Session::getId())->update([
'user_id' => $user ? $user->id : null
]);
}
}

或者您可以尝试 this .

关于authentication - 获取所有连接的用户(Laravel 5),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32666052/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com