首先,下载jwt的扩展
composer require lcobucci/jwt 3.3
一: 创建封装生成token的类
php artisan make:controller Api/TokenController
二 : 生成token
需要调用
use Lcobucci\JWT\Builder;
use Lcobucci\JWT\Signer\Hmac\Sha256;
use Lcobucci\JWT\Parser;
use Lcobucci\JWT\ValidationData;
//生成token
static public function createToken($uid=null){
$signer = new Sha256();//加密规则
$time = time();//当前时间
$token = (new Builder())
->issuedBy('teacher')//签发人
->canOnlyBeUsedBy('student')//接收人
->identifiedBy('kaslana', true) //标题id
->issuedAt($time)//发出令牌的时间
->canOnlyBeUsedAfter($time) //生效时间(即时生效)
->expiresAt($time + 3600) //过期时间
->with('uid', $uid) //用户id
->sign($signer, 'kiana') //签名
->getToken(); //得到token
return (string)$token;
}
三 :验证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('kaslana');
if(!$token->validate($data)){
return 0;
}
//验证签名
$signer = new Sha256();
if(!$token->verify($signer, 'kiana')){
return 0;
}
//验证通过,返回用户id
return $token->getClaim('uid');
}
四 : 简单调用生成token的方法
public function index()
{
//生成token
$token = (new TokenController)->createToken();
//返回接口token
return ['error_code' => 200,'msg' => '请求成功','data' => $token];
}
五 : 简单调用验证token的方法
public function register(Request $request)
{
//接收token
$token = $request->get('token');
//验证token
$res = (new TokenController)->verifyToken();
//判断token是否合规
if ($res){
//合规
return ['error_code' => '200','msg' => '请求成功','data' => ''];
}else{
//不合规
return ['error_code' => '10001','msg' => 'token错误','data' => ''];
}
}
六 :在小程序端检测返回的状态码是否为200,为200是请求成功,不为200为请求失败。
END