使用 LexikJWTAuthenticationBundle ,可以在控制器内验证传递的令牌吗?
p.s。我知道我可以执行$this->getUser()
来返回用户的身份(如果用户已通过身份验证),否则返回null
。但这不是我所追求的。
我想知道是否有某种isTokenValid('the-token-string');
给出了 true / false 响应?
答案 0 :(得分:2)
将JWTEncoderInterface注入您的控制器,
public function __construct(JWTEncoderInterface $jwtEncoder)
{
$this->jwtEncoder = $jwtEncoder;
}
然后在您的方法中,您可以像这样解码令牌
try {
$this->jwtEncoder->decode($token);
} catch (JWTDecodeFailureException $ex) {
// if no exception thrown then the token could be used
}
如果未引发异常,则可以使用令牌。请注意,如果
会引发异常但是如果您想具体知道发生了哪一个,则应该注入
控制器的JWSProviderInterface
public function __construct(JWSProviderInterface $jwsProvider)
{
$this->jwsProvider = $jwsProvider;
}
并在您的方法中调用它的加载操作
try{
$jws = $this->jwsProvider->load($token);
}catch(\Exception $e){
}
if (!$jws->isInvalid()) {
//if token is valid
}
if (!$jws->isExpired()) {
//if token is not expired
}
if ($jws->isVerified()) {
//if token is verified
}