PHP code example of zengzhonggang / php-jwt

1. Go to this page and download the library: Download zengzhonggang/php-jwt library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

zengzhonggang / php-jwt example snippets


use ZZG\JWT\JWT;

$jwtService = JWT::init([JWT::HS256,'123']);
//生成
$payload = [
    'user' => 'zzg',
    'role' => 'admin'
];

$token = $jwtService->generateToken($payload)
        ->setKindex(0)
        ->toString();
        
//解析
$tokenResolver = $jwtService->analyticToken($token);

$payload = $tokenResolver->getPayload();
echo $payload->getExpirationTime();
echo $payload->get('user');
var_export($payload->toArray());

//单个加密算法
$jwtService = JWT::init([JWT::HS256,'123']);
//多套加密算法
$jwtService = JWT::init([[JWT::HS256,'123'],[JWT::HS256,'456']]);
//自定义算法unique_id,
$jwtService = JWT::init([JWT::HS256,'123','kid']);

//openssl
$privateKey = '';
$publicKey = '';
$jwtService = JWT::init([JWT::RS256,[$publicKey,$privateKey]]);

//数组payload
$payload = [
    'user' => 'zzg',
    'role' => 'admin'
];
//使用对象
$payload = new \ZZG\JWT\Payload\Claim();
$payload->setExpirationTime(time()+24*60*60);
$payload->setPublicClaim('user','zzg');

$tokenGenerator = $jwtService->generateToken($payload);
//添加payload
$tokenGenerator->setPayload('role','admin');
//选择token加密算法
//只初始了一个加密算法,也需要设置;多个加密算法,设置算法数组下标
$tokenGenerator->setKindex(0);
//如果加密算法自定义了unique_id,可以使用自定义unique_id
//$jwtService = JWT::init([JWT::HS256,'123','kid-1']);
$tokenGenerator->setKid('kid-1');

$tokenResolver = $jwtService->analyticToken($token);
try {
    $tokenResolver->verify();
 }catch (Exception $exception) {
    //todo
 }
 
 //在使用payload之前没有验证操作,可能会抛出TokenInvalidException异常
 //token的生效和有效期不会验证
$payload = $tokenResolver->getPayload();
echo $payload->getExpirationTime();
echo $payload->get('user');
var_export($payload->toArray());

//验证通过 code 为 0
switch ($tokenResolver->errorCode()) {
    case \ZZG\JWT\Exception\TokenInvalidException::CODE:
        //todo
        break;
    case \ZZG\JWT\Exception\SignatureInvalidException::CODE:
        //todo
        break;
    case \ZZG\JWT\Exception\BeforeValidException::CODE:
        //todo
        break;
    case \ZZG\JWT\Exception\ExpiredException::CODE:
        //todo
        break;
}
    
try {
    $tokenResolver->verify();
 } catch (\ZZG\JWT\Exception\BeforeValidException $e) {
    //todo token还未生效
 } catch (\ZZG\JWT\Exception\ExpiredException $e) {
    //todo token过期
 } catch (\ZZG\JWT\Exception\SignatureInvalidException $e) {
    //todo 签名验证失败
 } catch (RuntimeException $e) {
    //todo 其他异常
 }
shell
composer