suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Aktualisieren Sie das Tymon/jwt-auth-Token in der Laravel-API

<p>Ich habe eine Laravel-API und habe <code>tymon/jwt-auth</code> installiert. Um den Benutzer anzumelden und das Token zu erhalten, verwende ich den folgenden Code: </p> <pre class="brush:php;toolbar:false;">if (! $token = auth()->attempt($request->only('email', 'password'), true)) { throw ValidationException::withMessages([ 'email' => 'Ungültige Anmeldeinformationen', ]); } return new TokenResource([ 'token' => $token, 'user' => $user, ]); </pre> <p>Ich habe auch einen Endpunkt für <code>refresh token</code>, der das alte Token ungültig machen und ein neues ausstellen soll. Laut Dokumentation habe ich folgenden Code hinzugefügt: </p> <pre class="brush:php;toolbar:false;">return new TokenResource([ 'token' => auth()->refresh(), 'user' => auth()->user(), ]); </pre> <p>Das Problem besteht darin, dass, wenn ich mit dem aktuellen Token auf den Endpunkt zugreife, zwar ein neues Token zurückgegeben wird, das alte jedoch noch gültig ist. </p> <p>Gibt es eine Möglichkeit, das Aktualisierungstoken ungültig zu machen? </p>
P粉798010441P粉798010441561 Tage vor654

Antworte allen(2)Ich werde antworten

  • P粉557957970

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

    这是默认行为。所以为了实现你想要的结果,你可以将它们列入黑名单。当用户尝试使用一个令牌时,你可以检查它是否在黑名单中。如果是的话,你可以拒绝它。

    你可以通过创建一个中间件来实现这一点,该中间件会检查令牌是否在黑名单中,并将该中间件应用于需要令牌验证的路由。

    中间件:

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

    然而,只有在你的系统实际需要时才应该这样做。

    Antwort
    0
  • P粉768045522

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

    在创建后,您无法手动使令牌过期。这就是令牌的工作原理。如果您创建了令牌,它将在过期之前有效,但您可以创建令牌的黑名单,每次刷新令牌时,将第一个令牌添加到黑名单中,还可以考虑降低令牌的生命周期(如果足够低),您可以依靠自动过期机制。

    Antwort
    0
  • StornierenAntwort