Выход из всех устройств в JWT API с помощью Laravel: методы и примеры кода

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

Метод 1: сохранение версии токена JWT
Один из подходов заключается в сохранении версии токена в записи базы данных пользователя. Всякий раз, когда пользователь выходит из системы с любого устройства, вы увеличиваете версию токена. При проверке токенов JWT вы сравниваете версию токена из базы данных с версией токена. Если они не совпадают, токен считается недействительным. Вот пример:

  1. Добавьте столбец token_versionв таблицу пользователей:
Schema::table('users', function (Blueprint $table) {
    $table->integer('token_version')->default(0);
});
  1. Увеличьте token_versionпри выходе из системы:
public function logout(Request $request)
{
    $user = $request->user();
    $user->token_version++;
    $user->save();

    // Perform other logout actions
}
  1. Проверить версию токена во время аутентификации:
public function authenticate(Request $request)
{
    $credentials = $request->only('email', 'password');

    if (Auth::attempt($credentials)) {
        $user = Auth::user();

        if ($user->token_version !== $request->token_version) {
            // Token version mismatch, consider the token invalid
            return response()->json(['error' => 'Invalid token'], 401);
        }
// Generate and return new token
    }
// Handle failed authentication
}

Метод 2: внесение токенов в черный список.
Другой подход заключается в ведении черного списка недействительных токенов. Когда пользователь выходит из системы, вы добавляете токен в черный список. Во время проверки токена вы проверяете, существует ли токен в черном списке. Вот пример:

  1. Создайте таблицу tokensдля хранения токенов из черного списка:
Schema::create('tokens', function (Blueprint $table) {
    $table->id();
    $table->string('token')->unique();
    $table->timestamps();
});
  1. Занести токен в черный список при выходе из системы:
public function logout(Request $request)
{
    $token = $request->bearerToken();
    DB::table('tokens')->insert([
        'token' => $token,
        'created_at' => now(),
        'updated_at' => now(),
    ]);
    // Perform other logout actions
}
  1. Проверить токен в черном списке во время аутентификации:
public function authenticate(Request $request)
{
    $token = $request->bearerToken();
    $blacklisted = DB::table('tokens')->where('token', $token)->exists();
    if ($blacklisted) {
        // Token is blacklisted, consider it invalid
        return response()->json(['error' => 'Invalid token'], 401);
    }
// Generate and return new token
}

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