Как выйти из пользователей со всех устройств в JWT API Laravel

Чтобы выйти из системы пользователя со всех устройств в JWT API, созданном с помощью Laravel, вы можете использовать пакет JWTи встроенные механизмы аутентификации Laravel. Вот несколько методов, которые вы можете использовать, а также примеры кода:

Метод 1: сделать недействительными все токены в базе данных.
С помощью этого метода вы можете отслеживать токены каждого пользователя в таблице базы данных и аннулировать все токены, связанные с пользователем, при выходе из системы.

  1. Создать миграцию для хранения токенов пользователей:

    php artisan make:migration create_user_tokens_table --create=user_tokens
  2. Измените файл миграции следующим образом:

    public function up()
    {
    Schema::create('user_tokens', function (Blueprint $table) {
        $table->id();
        $table->foreignId('user_id')->constrained()->onDelete('cascade');
        $table->string('token')->unique();
        $table->timestamps();
    });
    }
  3. Запустите миграцию, чтобы создать таблицу user_tokens:

    php artisan migrate
  4. Создайте в контроллере аутентификации метод для аннулирования токенов:

    public function logoutAllDevices(Request $request)
    {
    $user = Auth::user();
    $user->tokens()->delete();
    return response()->json(['message' => 'Logged out from all devices.']);
    }
  5. Определите маршрут для метода выхода из системы в файле routes/api.php:

    Route::post('logout-all', 'AuthController@logoutAllDevices');

Метод 2: токены черного списка с пакетом черного списка JWT
В этом методе вы можете использовать пакет tymon/jwt-auth, который обеспечивает функцию внесения токенов в черный список.

  1. Установите пакет tymon/jwt-auth:

    composer require tymon/jwt-auth
  2. Опубликуйте файл конфигурации пакета:

    php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider"
  3. Сгенерировать секретный ключ для JWT:

    php artisan jwt:secret
  4. Измените файл config/jwt.phpи установите 'blacklist_enabled' =>true, чтобы включить черный список токенов.

  5. Создайте в контроллере аутентификации метод для аннулирования токенов:

    public function logoutAllDevices(Request $request)
    {
    $user = Auth::user();
    $user->tokens()->delete();
    JWTAuth::invalidate($request->token);
    return response()->json(['message' => 'Logged out from all devices.']);
    }
  6. Определите маршрут для метода выхода из системы в файле routes/api.php:

    Route::post('logout-all', 'AuthController@logoutAllDevices');

Это два распространенных метода выхода пользователей из всех устройств в JWT API, созданном с помощью Laravel. Вы можете выбрать метод, соответствующий требованиям вашего проекта.