web-dev-qa-db-ja.com

laravelパスポートのユーザーのすべてのトークンを無効にする方法は?

このアプリでは、ユーザーがログアウトすると、特定のデバイスのアクセストークンをこの方法で無効にします。

$user = $request->user();

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

しかし、ユーザーが自分のアカウントを無効にした場合、ユーザーがログインしているすべてのデバイスからのすべてのアクセストークンを無効にしたいと思います。ありがとう

18
Sayantan Das

パスポートが提供する HasApiTokens 特性を見てください。 documentation は、この特性をユーザーモデルに追加することを推奨しています。提供するメソッドの1つはtokens()です。これは、Laravel\Passport\Tokenと特性を使用するモデルとのhasMany関係を定義します。これを使用して、特定のユーザーのすべてのトークンのリストを取得できます。

$userTokens = $userInstance->tokens;

トークンモデル自体にはrevokeメソッドがあります。

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