如何使JWT令牌PHP无效


How to invalidate a JWT token PHP

我试图使JWT中的一个令牌无效(或删除),但我无法实现。首先,我做了这样的事情,回答说Laravel JWT身份验证的注销问题:

JWTAuth::invalidate(JWTAuth::getToken())):

但我得到了这个错误:

假设$this来自不兼容的上下文,则不应静态调用非静态方法Tymon''JWTAuth''JWT::invalidate()

然后我做了这样的事情:

use Illuminate'Http'Request;
use Tymon'JWTAuth'JWTAuth;
class AuthController extends Controller
{
    protected $jwt;
    public function __construct(JWTAuth $jwt)
    {
        $this->jwt = $jwt;
    }
    public function invalidateToken(Request $request)
    {
        $this->jwt->parseToken()->invalidate();
        return response()->json(array('message' => 'log out'));
    }
    ...
}

但我仍然可以将令牌用于另一个请求,并且我不能删除或使其无效。

我做错了什么使令牌无效?

编辑:

我从这里读到了另一个问题,并在github上发布了JWT回购的帖子(这是我正在使用的库),我遵循了所有的例子来使令牌无效或删除,但我仍然无法删除或使其无效。

如果.env文件中的cache_driver设置为数组以外的值,则黑名单功能有效。

将其更改为文件对我来说很有效。然而,在我的特定情况下,我也使用了Entrust,当cache_driver设置为文件或数据库时会出现问题。因此,不得不删除黑名单/无效功能。

希望这能帮助到别人。

我认为它应该是这样的:$this->jwt->setToken($old_token)->invalidate(true);

JWTAuth::invalidate(old token);