如何使 JWT 令牌 PHP 无效
Posted
技术标签:
【中文标题】如何使 JWT 令牌 PHP 无效【英文标题】:How to invalidate a JWT token PHP 【发布时间】:2016-12-03 03:41:31 【问题描述】:我正在尝试使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 的回购中发布了帖子,我按照所有示例使令牌无效或删除,但我仍然无法删除或使其无效。
【问题讨论】:
从本质上讲,您不能使令牌无效。您可以在这里选择:***.com/questions/21978658/… @E_p 我正在使用这个库:github.com/tymondesigns/jwt-auth,我没有使用nodejs
的库
没有区别 JWT 适用于任何服务器端语言。没有使令牌过期的机制 我提供的链接中接受的答案告诉您如何处理它。
@E_p 你说得对,谢谢!!
这是一个关于 JWT 撤销的有趣 POV:dinochiesa.net/?p=1388
【参考方案1】:
如果您的 .env 文件中的 cache_driver 设置为数组以外的内容,则黑名单功能有效。
将其更改为文件对我有用。但是,在我的特殊情况下,我也使用了 Entrust,当 cache_driver 设置为文件或数据库时会导致问题。所以,不得不放弃黑名单/无效功能。
希望这对某人有所帮助。
【讨论】:
【参考方案2】:我认为它应该是这样的:$this->jwt->setToken($old_token)->invalidate(true);
【讨论】:
【参考方案3】:JWTAuth::invalidate(old token);
【讨论】:
以上是关于如何使 JWT 令牌 PHP 无效的主要内容,如果未能解决你的问题,请参考以下文章