tp5 jwt验证

composer 安装JWT

composer require lcobucci/jwt 3.3

在extend/tools/jwt创建Token.php

注意:如果没有该目录,则自行创建

 

  <?php
  
  namespace tools\jwt;
  
  use Lcobucci\JWT\Builder;
  use Lcobucci\JWT\Parser;
  use Lcobucci\JWT\Signer\Hmac\Sha256;
  use Lcobucci\JWT\ValidationData;
  
 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');
 }

 



调用Token

首先需要建一个Base基类 然后除登录控制器外 所有的控制器都需要继承Base基类

<?php

namespace app\homes\controller;

use think\Controller;
use think\Request;
use tools\jwt\Token;

class Base extends Controller
{
public function __construct(Request $request = null)
{
parent::__construct($request);
if (session('id') == ''){
$this->success('您还没有登录哦~','/login');
}
$id = session('id');
//生成token
$token = Token::createToken($id); //生成token
$res = Token::verifyToken($token);
if ($res == 0) {
//验证失败
$this->error('token令牌失效', '/login');
}
}
}

 

posted on 2021-07-29 15:32  二十一年春  阅读(157)  评论(0)    收藏  举报