如何使用Laravel确定用户在线状态/离线状态?

时间:2020-02-11 10:50:15

标签: laravel

我想在用户登录管理面板时在用户面板上显示联机状态。

有人有想法请帮助我吗?

1 个答案:

答案 0 :(得分:0)

您可以使用

身份验证指令

@auth@guest指令可用于快速确定当前用户是否已通过身份验证或是访客:

@auth
    <a href="#">
        <i class="fa fa-circle text-success"></i> 
        Online
    </a>
@endauth

@guest
    // The user is not authenticated...
@endguest

编辑(如果要获取用户列表)

步骤:1创建一个中间件 使用此命令创建中间件LastUserActivity。

php artisan make:middleware LastUserActivity

添加一些代码检查用户是否在线

\\App\Http\Middleware\LastUserActivity.php

<?php

namespace App\Http\Middleware;

use Closure;
use Auth;
use Cache;
use Carbon\Carbon;
class LastUserActivity
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if(Auth::check()) {
            $expiresAt = Carbon::now()->addMinutes(1);
            Cache::put('user-is-online-' . Auth::user()->id, true, $expiresAt);
        }
        return $next($request);
    }
}

步骤:2将一个类添加到内核中

将一个类添加到middlewareGroups的内核文件中

protected $middlewareGroups = [
        'web' => [
            \App\Http\Middleware\EncryptCookies::class,
            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
            \Illuminate\Session\Middleware\StartSession::class,
            \Illuminate\View\Middleware\ShareErrorsFromSession::class,
            \App\Http\Middleware\VerifyCsrfToken::class,
            \Illuminate\Routing\Middleware\SubstituteBindings::class,

             \App\Http\Middleware\LastUserActivity::class,
        ],

        'api' => [
            'throttle:60,1',
            'bindings',
        ],
];

步骤:3在用户模型中添加一个功能

public function isOnline()
{
    return Cache::has('user-is-online-' . $this->id);
}

不要忘记在use Cache;模型中添加User在顶部;

步骤:4在Laravel应用程序中在线或离线检查用户 在视图中使用isOnline函数。

@if($user->isOnline())
    user is online!!
@endif

Reference