recherche

Maison  >  Questions et réponses  >  le corps du texte

Mettre à jour le jeton tymon/jwt-auth dans l'API Laravel

<p>J'ai une API Laravel et j'ai installé <code>tymon/jwt-auth</code>. Pour connecter l'utilisateur et obtenir le jeton, j'utilise le code suivant : </p> <pre class="brush:php;toolbar:false;">if (! $token = auth()->attempt($request->only('email', 'password'), true)) { lancer ValidationException::withMessages([ 'email' => 'Identifiants invalides', ]); } renvoyer un nouveau TokenResource ([ 'jeton' => $jeton, 'utilisateur' => $utilisateur, ]); ≪/pré> <p>J'ai également un point de terminaison pour <code>refresh token</code> qui est censé invalider l'ancien jeton et en émettre un nouveau. D'après la documentation, j'ai ajouté le code suivant : </p> <pre class="brush:php;toolbar:false;">retourner un nouveau TokenResource([ 'jeton' => auth()->refresh(), 'utilisateur' => auth()->utilisateur(), ]); ≪/pré> <p>Le problème est que lorsque j'accède au point de terminaison avec le jeton actuel, il renvoie un nouveau jeton, mais l'ancien est toujours valide. </p> <p>Existe-t-il un moyen d'invalider le jeton d'actualisation ? </p>
P粉798010441P粉798010441471 Il y a quelques jours583

répondre à tous(2)je répondrai

  • P粉557957970

    P粉5579579702023-08-15 11:18:45

    C'est le comportement par défaut. Ainsi, pour obtenir les résultats souhaités, vous pouvez les mettre sur liste noire. Lorsqu'un utilisateur tente d'utiliser un token, vous pouvez vérifier s'il figure dans la liste noire. Si tel est le cas, vous pouvez le refuser.

    Vous pouvez y parvenir en créant un middleware qui vérifie si le jeton est dans la liste noire et appliquez ce middleware aux routes qui nécessitent une validation du jeton.

    Middleware :

    public function handle($request, Closure $next)
    {
        $token = $request->bearerToken();
        
        if (TokenBlacklist::where('token', $token)->exists()) {
            return response()->json(['message' => '令牌已失效'], 401);
        }
    
        return $next($request);
    }

    Cependant, vous ne devez le faire que si votre système l'exige réellement.

    répondre
    0
  • P粉768045522

    P粉7680455222023-08-15 00:53:41

    Vous ne pouvez pas expirer manuellement un jeton après sa création. C'est ainsi que fonctionnent les jetons. Si vous créez un jeton, il sera valide jusqu'à son expiration, mais vous pouvez créer une liste noire de jetons et chaque fois que vous actualisez le jeton, ajoutez le premier jeton à la liste noire, envisagez également de réduire la durée de vie du jeton (si elle est suffisamment basse), vous peut compter sur un mécanisme d’expiration automatique.

    répondre
    0
  • Annulerrépondre