我试图从JWT
无效(或删除)一个令牌,但我无法做到这一点。首先我做了类似这样的回答Logout issue with Laravel JWT-auth authentication:
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 (this is the library I'm using)上发布了JWT回购的帖子,我按照所有的例子来使无效或删除令牌,我仍然无法删除或使其无效。
如果.env文件中的cache_driver设置为数组以外的其他内容,则黑名单功能有效。
将其更改为文件对我有用。但是,在我的特定情况下,我也在使用Entrust,这会在cache_driver设置为file或database时导致问题。所以,不得不放弃黑名单/无效功能。
希望这有助于某人。
这就是我认为它应该是这样的:$this->jwt->setToken($old_token)->invalidate(true);
JWTAuth::invalidate(old token);