Отслеживание последней активности пользователей в Laravel

Такая задача встречается довольно часто, чтобы понимать, когда наш посетитель последний раз использовал наше приложение.

Хотя в Laravel есть много способов сделать это, самый простой способ – это использовать web middlewere.

Настройка

Когда аутентифицированный пользователь посетит наше приложение, мы сохраним метку времени в базе данных для последующего использования. Давайте сохраним его в колонке под названием last_active_at.

Все что вам нужно сделать это создать миграцию:

php artisan make:migration add_last_active_at_to_users_table --table=users

И добавьте в up()метод следующую строку:

$table->timestamp('last_active_at')->nullable();

Если пользователь никогда не посещал приложение, то он останется NULL в базе данных.

Middleware

Логика

Middleware будет отвечать за проверку состояния аутентификации и обновление last_active_at.

namespace App\Http\Middleware;

use Illuminate\Http\Request;
use Closure;

class TrackLastActiveAt
{
    public function handle(Request $request, Closure $next)
    {
        if (! $request->user()) {
            return $next($request);
        }

        if (! $request->user()->last_active_at || $request->user()->last_active_at->isPast()) {
            $request->user()->update([
                'last_active_at' => now(),
            ]);
        }

        return $next($request);
    }
}

Вот что происходит по порядку:

  1. Мы проверяем, что текущий пользователь аутентифицирован. Если это не так, мы двигаемся к следующему middleware.
  2. Если текущая дата last_active_at== NULL или в прошлом, мы обновляем его, используя текущую дату и время. К счастью, Laravel имеет вспомогательную функцию now(, которая возвращает экземпляр Carbon\Carbon для текущей даты и времени.
  3. Мы двигаемся к следующему middleware.

Регистрация

У нас есть несколько различных вариантов регистрации middleware. Если вы хотите отслеживать активность ваших пользователей по всем маршрутам, она должна быть зарегистрирована под массивом web в App\Http\Kernel:

protected $middlewareGroups = [
    'web' => [
        // ...
        \App\Http\Middleware\TrackLastActiveAt::class,
    ]
]

Если вы хотите отслеживать только последние действия для определенных маршрутов, вы можете зарегистрировать middleware как часть вашего маршрута:

Route::get('/foo', 'FooController')->middleware([\App\Http\Middleware\TrackLastActiveAt::class]);

Рейтинг
( 2 оценки, среднее 5 из 5 )
Maxyc Webber/ автор статьи
Мне 35 лет. Опыт профессиональной разработки 15 лет. Занимаюсь разработкой и поддержкой корпоративных систем автоматизации бизнеса, а также высоконагруженными проектами. Мне нравится решать нестандартные проблемы бизнеса. Имею опыт формирования команд под проект, налаживания процесса разработки, коммуникации программистов и заказчиков. Есть опыт работы с зарубежными заказчиками (ОАЭ, Польша, Германия, Швейцария).
Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.