web-dev-qa-db-fra.com

Comment invalider tous les jetons d'un utilisateur dans le passeport laravel?

Dans notre application, lorsque l'utilisateur se déconnecte, nous invalidons le jeton d'accès pour cet appareil particulier de cette façon.

$user = $request->user();

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

Mais lorsqu'un utilisateur désactive son compte, nous voudrions invalider tous les jetons d'accès de tous les appareils auxquels l'utilisateur est connecté. J'ai parcouru le document mais je n'ai rien trouvé d'utile. Merci

18
Sayantan Das

Jetez un œil au trait HasApiTokens fourni par le passeport. Le documentation recommande d'ajouter ce trait à votre modèle d'utilisateur. L'une des méthodes qu'il propose est tokens(), qui définit une relation hasMany entre Laravel\Passport\Token et les modèles utilisant le trait. Vous pouvez l'utiliser pour récupérer une liste de tous les jetons pour un utilisateur donné:

$userTokens = $userInstance->tokens;

Le modèle de jeton lui-même a une méthode revoke:

foreach($userTokens as $token) {
    $token->revoke();   
}
34
Jeff Lambert