如何使JWT令牌无效

时间:2016-07-28 16:08:53

标签: php laravel jwt

我正试图使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回购中的帖子,并且我按照所有示例来使令牌无效或删除,我仍然无法删除或使其无效。

3 个答案:

答案 0 :(得分:0)

如果您的.env文件中的cache_driver设置为array以外的值,则黑名单功能将起作用。

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

希望这对某人有帮助。

答案 1 :(得分:0)

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

答案 2 :(得分:-2)

JWTAuth::invalidate(old token);