Чтобы выйти из системы пользователя со всех устройств в JWT API, созданном с помощью Laravel, вы можете использовать пакет JWTи встроенные механизмы аутентификации Laravel. Вот несколько методов, которые вы можете использовать, а также примеры кода:
Метод 1: сделать недействительными все токены в базе данных.
С помощью этого метода вы можете отслеживать токены каждого пользователя в таблице базы данных и аннулировать все токены, связанные с пользователем, при выходе из системы.
-
Создать миграцию для хранения токенов пользователей:
php artisan make:migration create_user_tokens_table --create=user_tokens -
Измените файл миграции следующим образом:
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(); }); } -
Запустите миграцию, чтобы создать таблицу
user_tokens:php artisan migrate -
Создайте в контроллере аутентификации метод для аннулирования токенов:
public function logoutAllDevices(Request $request) { $user = Auth::user(); $user->tokens()->delete(); return response()->json(['message' => 'Logged out from all devices.']); } -
Определите маршрут для метода выхода из системы в файле
routes/api.php:Route::post('logout-all', 'AuthController@logoutAllDevices');
Метод 2: токены черного списка с пакетом черного списка JWT
В этом методе вы можете использовать пакет tymon/jwt-auth, который обеспечивает функцию внесения токенов в черный список.
-
Установите пакет
tymon/jwt-auth:composer require tymon/jwt-auth -
Опубликуйте файл конфигурации пакета:
php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider" -
Сгенерировать секретный ключ для JWT:
php artisan jwt:secret -
Измените файл
config/jwt.phpи установите'blacklist_enabled' =>true, чтобы включить черный список токенов. -
Создайте в контроллере аутентификации метод для аннулирования токенов:
public function logoutAllDevices(Request $request) { $user = Auth::user(); $user->tokens()->delete(); JWTAuth::invalidate($request->token); return response()->json(['message' => 'Logged out from all devices.']); } -
Определите маршрут для метода выхода из системы в файле
routes/api.php:Route::post('logout-all', 'AuthController@logoutAllDevices');
Это два распространенных метода выхода пользователей из всех устройств в JWT API, созданном с помощью Laravel. Вы можете выбрать метод, соответствующий требованиям вашего проекта.