Как проверить токен jwt программно в Symfony? - PullRequest
0 голосов
/ 24 марта 2019

Используя LexikJWTAuthenticationBundle , возможно ли проверить переданный токен в контроллере ?

p.s. Я знаю, что могу сделать $this->getUser(), который возвращает пользователя, если пользователь был аутентифицирован, и null в противном случае. Но это не то, что я после.

Я хотел бы знать, есть ли что-то вроде isTokenValid('the-token-string');, которое дает true / false ответ?

1 Ответ

2 голосов
/ 24 марта 2019

введите 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
   }
...