PHP怎么使用jwt生成 token并且验证

我现在需要写一个用户登录的端口,前端发送登录信息用户名:xiaoming,密码:123456到端口www.abc.com/php/login.php,这个PHP要验证用户名和密码,然后生成一个token和用户信息返回给前端,然后前端再次请求的时候会带上这个token,php要怎么验证解析这个token并返回相应的用户信息,这个php文件要怎么写呢?

<?php
require_once '../vendor/autoload.php';
use Firebase\JWT\JWT;
use Firebase\JWT\Key;

?>


第一 账号密码登录 获取token
JWT需要composer安装下,然后调用

$jwt_config = [
    'iss' => config('jwt.iss'), //签发者 可选
    'aud' => config('jwt.iss'), //接收该JWT的一方,可选
    'iat' => time(), //签发时间
    'nbf' => time() , //(Not Before):某个时间点后才能访问,比如设置time+30,表示当前时间30秒后才能使用
    'exp' => time()+7200, //过期时间,这里设置2个小时
    'data' => [ //自定义信息,不要定义敏感信息
        'user_id' => $user_data['id']
    ]
];
$token=JWT::encode($jwt_config,config('jwt.key'),'HS256');

第二 解密token

//检测token
public function check_token($token){
  try {
    JWT::$leeway = 60;//当前时间减去60,把时间留点余地
    $decoded = JWT::decode($token, config('jwt.key'), ['HS256']); //HS256方式,这里要和签发的时候对应
    $arr = (array)$decoded;
    $result=['code'=>200,'msg'=>'OK','user_id'=>$arr['data']->user_id];
  } catch(SignatureInvalidException $e) {  //签名不正确
    $result=['code'=>400,'msg'=>$e->getMessage()];
  }catch(BeforeValidException $e) {  // 签名在某个时间点之后才能用
    $result=['code'=>400,'msg'=>$e->getMessage()];
  }catch(ExpiredException $e) {  // token过期
    $result=['code'=>400,'msg'=>$e->getMessage()];
  }catch(\Exception $e) {  //其他错误
    $result=['code'=>400,'msg'=>$e->getMessage()];
  }
  return $result;
}
这样就能得到用户id
class Token
{
    public static function createToken($uid = null)
    {
        $signer = new Sha256();//加密规则
        $time = time();//当前时间

        $token = (new Builder())
            ->issuedBy('teacher')//签发人
            ->canOnlyBeUsedBy('student')//接收人
            ->identifiedBy('MarsLei', true) //标题id
            ->issuedAt($time)//发出令牌的时间
            ->canOnlyBeUsedAfter($time) //生效时间(即时生效)
            ->expiresAt($time + 3600) //过期时间
            ->with('uid', $uid) //用户id
            ->sign($signer, 'my') //签名
            ->getToken(); //得到token
        return (string)$token;
    }

    public static function verifyToken($token = null)
    {
        //检测是否接收到了token
        if (empty($token)) {
            return 0;
        }
        //转化为可以验证的token
        $token = (new Parser())->parse((string)$token);
        //验证基本设置
        $data = new ValidationData();
        $data->setIssuer('teacher');
        $data->setAudience('student');
        $data->setId('MarsLei');

        if (!$token->validate($data)) {
            return 0;
        }
        //验证签名
        $signer = new Sha256();
        if (!$token->verify($signer, 'my')) {
            return 0;
        }
        //验证通过,返回用户id
        return $token->getClaim('uid');
    }
}

验证用户名和密码正确以后得到用户ID,然后 调用

 //生成Token
$token=Token::createToken($id);

验证Token的话,就用以下验证
//验证Token

$res=Token::verifyToken($token);
if ($res==0){
    $this->error('Token令牌失效','test/Login/login');
}