@@ -245,6 +245,56 @@ $decoded = JWT::decode($jwt, $keySet);
245245Miscellaneous
246246-------------
247247
248+ #### Exception Handling
249+
250+ When a call to ` JWT::decode ` is invalid, it will throw one of the following exceptions:
251+
252+ ``` php
253+ use Firebase\JWT\JWT;
254+ use Firebase\JWT\SignatureInvalidException;
255+ use Firebase\JWT\BeforeValidException;
256+ use Firebase\JWT\ExpiredException;
257+ use DomainException;
258+ use InvalidArgumentException;
259+ use UnexpectedValueException;
260+
261+ try {
262+ $decoded = JWT::decode($payload, $keys);
263+ } catch (InvalidArgumentException $e) {
264+ // provided key/key-array is empty or malformed.
265+ } catch (DomainException $e) {
266+ // provided algorithm is unsupported OR
267+ // provided key is invalid OR
268+ // unknown error thrown in openSSL or libsodium OR
269+ // libsodium is required but not available.
270+ } catch (SignatureInvalidException $e) {
271+ // provided JWT signature verification failed.
272+ } catch (BeforeValidException $e) {
273+ // provided JWT is trying to be used before "nbf" claim OR
274+ // provided JWT is trying to be used before "iat" claim.
275+ } catch (ExpiredException $e) {
276+ // provided JWT is trying to be used after "exp" claim.
277+ } catch (UnexpectedValueException $e) {
278+ // provided JWT is malformed OR
279+ // provided JWT is missing an algorithm / using an unsupported algorithm OR
280+ // provided JWT algorithm does not match provided key OR
281+ // provided key ID in key/key-array is empty or invalid.
282+ }
283+ ```
284+
285+ All exceptions in the ` Firebase\JWT ` namespace extend ` UnexpectedValueException ` , and can be simplified
286+ like this:
287+
288+ ``` php
289+ try {
290+ $decoded = JWT::decode($payload, $keys);
291+ } catch (LogicException $e) {
292+ // errors having to do with environmental setup or malformed JWT Keys
293+ } catch (UnexpectedValueException $e) {
294+ // errors having to do with JWT signature and claims
295+ }
296+ ```
297+
248298#### Casting to array
249299
250300The return value of ` JWT::decode ` is the generic PHP object ` stdClass ` . If you'd like to handle with arrays
@@ -269,7 +319,7 @@ Changelog
269319#### 6.2.0 / 2022-05-14
270320
271321 - Added ` CachedKeySet ` ([ #397 ] ( https://github.com/firebase/php-jwt/pull/397 ) )
272- - Added ` $defaultAlg ` parameter to ` JWT::parseKey ` and ` JWT::parseKeySet ` ([ #426 ] ( https://github.com/firebase/php-jwt/pull/426 ) ).
322+ - Added ` $defaultAlg ` parameter to ` JWT::parseKey ` and ` JWT::parseKeySet ` ([ #426 ] ( https://github.com/firebase/php-jwt/pull/426 ) ).
273323
274324#### 6.1.0 / 2022-03-23
275325
0 commit comments