繁体   English   中英

如何使 JWT 令牌 PHP 无效

[英]How to invalidate a JWT token PHP

我正在尝试使JWT中的令牌无效(或删除),但我无法实现。 首先,我做了类似这个答案的事情,说Laravel JWT-auth authentication 的 Logout issue

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

但我得到这个错误:

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

然后我做了这样的事情:

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 回购中发布了帖子(这是我正在使用的库) ,我按照所有示例使令牌无效或删除,但我仍然无法删除或使其无效。

use Tymon\JWTAuth\Facades\JWTAuth;

JWTAuth::setToken($old token)->invalidate();

在 AuthController 中替换use Tymon\JWTAuth\JWTAuth;

use Tymon\JWTAuth\Facades\JWTAuth;

并添加这个

JWTAuth::setToken($old token)->invalidate();

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

将其更改为文件对我有用。 但是,在我的特殊情况下,我也使用了 Entrust,这会在将 cache_driver 设置为文件或数据库时导致问题。 因此,不得不删除黑名单/无效功能。

希望这可以帮助某人。

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

JWTAuth::invalidate(old token);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM