【问题标题】:Jwt Laravel 8 Exception TokenBlacklistedException not workingJwt Laravel 8 异常 TokenBlacklistedException 不起作用
【发布时间】:2022-02-16 02:16:12
【问题描述】:

异常TokenBlacklistedException 不起作用

我正在使用 Laravel 8,我正在尝试使用 Exception: TokenBlacklistedExceptionTokenExpiredException 但它不起作用。返回以下错误:

Tymon\JWTAuth\Exceptions\TokenBlacklistedException: The token has been blacklisted in file C:\Users\taha\Desktop\API-LARAVEL-8\Laravel-VUEJS\mynew-app\vendor\tymon\jwt-auth\src\Manager.php on line 109
#0 C:\Users\taha\Desktop\API-LARAVEL-8\Laravel-VUEJS\mynew-app\vendor\tymon\jwt-auth\src\Manager.php(128): Tymon\JWTAuth\Manager->decode(Object(Tymon\JWTAuth\Token))
#1 C:\Users\taha\Desktop\API-LARAVEL-8\Laravel-VUEJS\mynew-app\vendor\tymon\jwt-auth\src\JWT.php(106): Tymon\JWTAuth\Manager->refresh(Object(Tymon\JWTAuth\Token), false, false)
#2 C:\Users\taha\Desktop\API-LARAVEL-8\Laravel-VUEJS\mynew-app\app\Http\Middleware\JwtRefreshToken.php(44): Tymon\JWTAuth\JWT->refresh()
ion\Http\Middleware\TransformsRequest->handle(Object(Illuminate\Http\Request), Object(Clo...
<?php
    
    namespace App\Http\Middleware;
    
    use Closure;
    //use Exception;
    use Illuminate\Http\Request;
    
    use Tymon\JWTAuth\Exceptions\JWTException;
    use Tymon\JWTAuth\Exceptions\TokenExpiredException;
    use Tymon\JWTAuth\Exceptions\TokenInvalidException;
    use Tymon\JWTAuth\Exceptions\TokenBlacklistedException;
    
    //use Symfony\Component\HttpKernel\Exception\UnauthorizedHttpException;
    //use Symfony\Component\Debug\Exception\FatalErrorException;
    
    use Tymon\JWTAuth\Facades\JWTAuth;
    
    class JwtRefreshToken
    {
        /**
         * Handle an incoming request.
         *
         * @param  \Illuminate\Http\Request  $request
         * @param  \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse)  $next
         * @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
         */
        public function handle(Request $request, Closure $next)
        {
               //dd('Taha Suliman Ramadan');
       
               try {
    
                if (! $user = JWTAuth::parseToken()->authenticate()) {
                    return response()->json(['user_not_found'], 404);
                }
        
            } catch (TokenBlacklistedException $e) {
        
                return response()->json(['token_expired'], status: 401);
        
            }catch (TokenExpiredException $e) {
        
                $newToken = JWTAuth::parseToken()->refresh();
    
                return response()->json(['success'=>false,'token'=> $newToken,'message'=>'Token Expired (So Refreshed)...'], status:200);
         
            } catch (TokenInvalidException $e) {
        
                return response()->json(['token_invalid'], status: 401);
        
            } catch (JWTException $e) {
        
                return response()->json(['token_absent'], status: 401);
        
            }
    
        //---------------------------------        
            return $next($request);
    
        }
    }

如果你们之前遇到过这样的问题,请帮忙

【问题讨论】:

    标签: php laravel exception jwt laravel-8


    【解决方案1】:

    您可以在catch 块中使用instanceofinstanceof用于判断PHP变量是否为某个类的实例化对象:

    try 
    {
        // 
    } 
    catch (Exception $e)
    {
        if ($e instanceof TokenBlacklistedException)
        {
            //
        } 
        elseif ($e instanceof TokenExpiredException)
        {
            //
        }
        elseif ($e instanceof TokenInvalidException)
        {
            //
        }
        ...
    }
    

    无论如何,在 Laravel 中,所有异常都由 App\Exceptions\Handler 类处理。 Previous versions also said你可以在app/Exceptions/Handler.php处理异常。

    【讨论】:

      猜你喜欢
      • 2015-12-21
      • 2020-09-14
      • 1970-01-01
      • 1970-01-01
      • 2020-02-28
      • 2021-07-19
      • 2021-05-09
      • 1970-01-01
      • 2016-01-24
      相关资源
      最近更新 更多