- 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');
}
}
版权声明:本文为qq_56687451原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。
