Как аннулировать все токены для пользователя в паспорте laravel?

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

$user = $request->user();

$value = $request->bearerToken();
$id = (new Parser())->parse($value)->getHeader('jti');
$token = $user->tokens->find($id);
$token->revoke();

Но когда пользователь деактивирует свою учетную запись, мы хотели бы аннулировать все токены доступа со всех устройств, на которых пользователь вошел в систему. Я просмотрел документ, но не нашел ничего полезного. Спасибо


person Sayantan Das    schedule 17.03.2017    source источник


Ответы (1)


Взгляните на трейт HasApiTokens, указанный в паспорте. В документации рекомендуется добавить эту черту в вашу модель пользователя. Один из предоставляемых им методов — tokens(), который определяет отношение hasMany между Laravel\Passport\Token и моделями, использующими признак. Вы можете использовать это, чтобы получить список всех токенов для данного пользователя:

$userTokens = $userInstance->tokens;

Сама модель токена имеет метод revoke:

foreach($userTokens as $token) {
    $token->revoke();   
}
person Jeff Lambert    schedule 17.03.2017
comment
Мы вручную устанавливаем поле отзыва в 1 в таблице oauth_access_tokens для идентификатора пользователя. Но это кажется лучше - person Sayantan Das; 18.03.2017
comment
Я вручную отменяю все предыдущие токены пользователя, но в таблице oauth_refresh_tokens все еще есть запись с отозванным значением 0. Однако таблица oauth_access_tokens обновляется со значением 1 для отозванного. Можете ли вы помочь мне в этой ситуации или мне не нужно беспокоиться об этом? - person Sachin Kumar; 21.04.2018
comment
Спасибо, это работает как шарм для меня. ты супер пупер парень. - person Denis Bhojvani; 03.01.2019