Проверьте, если пользователь онлайн laravel - PullRequest
0 голосов
/ 28 апреля 2018

У меня есть столбец last_activity, где записывается дата последнего действия пользователя с промежуточным программным обеспечением.
Как я могу проверить онлайн-пользователя и когда он выходит из системы?

Middleware:

class LastActivityUser
{
/**
 * Handle an incoming request.
 *
 * @param  \Illuminate\Http\Request  $request
 * @param  \Closure  $next
 * @return mixed
 */
  public function handle($request, Closure $next)
  {
    if (\Auth::check() && (\Auth::user()->last_activity < new \DateTime('-5 minutes'))) {
        $user = \Auth::user();
        $user->last_activity = new \DateTime;
        $user->timestamps = false;
        $user->save();
    }
    return $next($request);
  }
}

Код в модели пользователя:

public function online() {
    return ($this->last_activity > new \DateTime('-5 minutes') && $user->check()) ? true : false;
}

$user->check => Auth::check() - не работает. Мне не нужно использовать Auth :: check (), мне нужно показывать онлайн-пользователя для других пользователей .. Но Auth::check() проверяет, остается ли пользователь в учетной записи только для текущего пользователя auth ..

Ответы [ 2 ]

0 голосов
/ 28 апреля 2018
<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Contracts\Auth\Factory as Auth;

class LastActivityUser
 {
     /**
     * The authentication factory instance.
     *
     * @var \Illuminate\Contracts\Auth\Factory
     */
     protected $auth;

     /**
     * Create a new middleware instance.
     *
     * @param  \Illuminate\Contracts\Auth\Factory  $auth
     * @return void
     */
     public function __construct(Auth $auth)
     {
         $this->auth = $auth;
     }
     /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
         if ($this->auth->check() && $this->auth->user()->last_activity < Carbon::now()->subMinutes(5)->format('Y-m-d H:i:s')) {
             $user = $this->auth->user();
             $user->last_activity = new \DateTime;
             $user->timestamps = false;
             $user->save();
        }
        return $next($request);
    }
}
0 голосов
/ 28 апреля 2018

вы можете использовать промежуточное ПО для проверки пользователей онлайн

if(Auth::check()) {
    $expiresAt = Carbon::now()->addMinutes(5);
    Cache::put('user-is-online-' . Auth::user()->id, true, $expiresAt);
}

и проверка пользователей:

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

в поле зрения:

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

возможно, этот документ поможет вам: https://erikbelusic.com/tracking-if-a-user-is-online-in-laravel/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...