PHP-Open-Source-Saver / jwt-auth 无效和黑名单 JWT 令牌

PHP-Open-Source-Saver / jwt-auth Invalidate and Blacklist JWT Token

我在 Apache2 服务器上的 PHP8.0 环境中设置了一个 Laravel 8.* 项目。我安装了新的 PHP-Open-Source-Saver / jwt-auth 存储库并实现了必要的中间件来验证 jwt 令牌以及 JwtController 以在登录时生成 jwt 令牌并在需要时刷新。

Api 请求通过以下方式进行身份验证:

$user = JWTAuth::parseToken()->authenticate();

到目前为止,除了 jwt 令牌的 invalidationblacklisting 之外,一切都按照盒子侧面的描述工作。

我的 jwt 配置黑名单密钥在 env 中设置为:

JWT_BLACKLIST_ENABLED=true
JWT_BLACKLIST_GRACE_PERIOD=0

我尝试了以下说明和所有方法,每个至少尝试了两次:

public function jwt_logout(Request $request)
{
    //get bearer token
    $token = $request->bearerToken();

    if (! isset($token) ) {
        return response()->json([
                'success' => false,
                'message' => 'Token is not set, please retry action or login.'
            ]);
    }

    //Invalidate and blacklist methods
    try {
        //JWTAuth::invalidate(JWTAuth::getToken());
        //JWTAuth::invalidate($request->bearerToken());
        //auth("api")->invalidate(true);
        //JWTAuth::invalidate($request->token);
        //JWTAuth::parseToken()->invalidate();
        //\Illuminate\Support\Facades\Auth::setToken($token)->invalidate(true);
        
        JWTAuth::setToken($token)->invalidate(true);

        //auth("api")->logout(true);
        //JWTAuth::invalidate(true);
        //\JWTAuth::manager()->invalidate(new \PHPOpenSourceSaver\JWTAuth\Token($token), $forceForever = true);

        return response()->json([
            'success' => true,
            'message' => 'User has been logged out'
        ]);
    } catch (JWTException $exception) {
        return response()->json([
            'success' => false,
            'message' => 'Sorry, user cannot be logged out'
        ], Response::HTTP_INTERNAL_SERVER_ERROR);
    }
}

但每次我尝试使用在上述方法 运行 之后被列入黑名单的 jwt 令牌时,它仍然允许对用户进行身份验证。没有 JWT 黑名单例外。没有错误。唯一停止身份验证的是当 jwt 令牌过期时。

有人可以帮助深入了解如何 invalidateblacklist jwt 令牌吗?

好的,我找到了答案。默认情况下,包有 disabled the showing of a blacklist exceptions.

我只需要在我的 .env 中设置 JWT_SHOW_BLACKLIST_EXCEPTION=1,现在就可以了。没有阅读软件包论坛问题是我的疏忽。