- composer先挂在阿里云镜像
2.安装JWT扩展 composer require lcobucci/jwt 3.3
3.在vendor目录中打开readme.md文件
4.在extend目录中,自定义类进行JWT操作生成token
5.操作Token.php实现生成token的方法,详细在readme.md中的Hmac位置
6.自行找控制器进行测试
7.最终会得到结果类似如下所示:
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiIsImp0aSI6IjRmMWcyM2ExMmFhIn0.eyJpc3MiOiJmYW54aW56ZSIsImF1ZCI6InVzZXIiLCJqdGkiOiI0ZjFnMjNhMTJhYSIsImlhdCI6MTYxOTY2NjUwNywibmJmIjoxNjE5NjY2NTY3LCJleHAiOjE2MTk2NzAxMDcsInVpZCI6MTJ9.N6CkSWaNdTVk2ust9QzRa1wpY-ZCQTwp5nYPLYa_K-k
8.封装验证Token的方法,如果失败返回false,如果成功返回用户id
<?php use Lcobucci\JWT\Builder; use Lcobucci\JWT\Signer\Hmac\Sha256; use Lcobucci\JWT\Parser; use Lcobucci\JWT\ValidationData; class Token{ //生成token static public function createToken($uid=null){ $signer = new Sha256();//加密规则 $time = time();//当前时间 $token = (new Builder()) ->issuedBy('teacher')//签发人 ->canOnlyBeUsedBy('student')//接收人 ->identifiedBy('quanzhan', true) //标题id ->issuedAt($time)//发出令牌的时间 ->canOnlyBeUsedAfter($time) //生效时间(即时生效) ->expiresAt($time + 3600) //过期时间 ->with('uid', $uid) //用户id ->sign($signer, '1902a') //签名 ->getToken(); //得到token return (string)$token; } //验证token static public function verifyToken($token=null){ //检测是否接收到了token if(empty($token)){ return 0; } //代码到30行,就表示取到token了,那么转化成jwt认识的token $token = (new Parser())->parse((string) $token); //验证基本设置 $data = new ValidationData(); $data->setIssuer('teacher'); $data->setAudience('student'); $data->setId('quanzhan'); if(!$token->validate($data)){ return 0; } //验证签名 $signer = new Sha256(); if(!$token->verify($signer, '1902a')){ return 0; } //验证通过,返回用户id return $token->getClaim('uid'); } }