2017-01-05 3 views
1

Я использую JWT для авторизации (REST API) в моем крошечном проекте. JWT выглядит очень подходящим для моего проекта.JWT Decode try catch

Скажем, у меня есть этот код:

$key = "secret"; 
$token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ" 
$data = JWT::decode($token, $key, array('HS256')); 

Этот код возвращает массив, как на официальной странице JWT.

Но если я пытаюсь запустить следующие коды:

$key = "secret"; 
$token = "abc.abc.abc" 
$data = JWT::decode($token, $key, array('HS256')); 

или

$key = "secret"; 
$token = "abc" 
$data = JWT::decode($token, $key, array('HS256')); 

PHP выдаст исключение/ошибка, как я могу справиться с этими исключениями/ошибок, с тем конечным пользователем не будут видеть их (вместе с моим секретным ключом в ошибке).

Я попытался сделать следующее:

try { 
    $key = "secret"; 
    $token = "abc" 
    $data = JWT::decode($token, $key, array('HS256')); 
} catch (Exception $e) { // Also tried JwtException 
    echo 'error'; 
} 

ответ

4

Я пришел только к тому же вопросу и решения, чтобы поймать эту ошибку:

catch (\Exception $e) not catch (Exception $e) 

так что ваш код становится:

try { 
    $key = "secret"; 
    $token = "abc" 
    $data = JWT::decode($token, $key, array('HS256')); 
} catch (\Exception $e) { // Also tried JwtException 
    echo 'error'; 
} 

здесь: https://github.com/firebase/php-jwt/issues/50

+0

Спасибо, это сработало !!! – Coder

+0

Это работает как шарм! +1 – Leo