解决'Firebase\JWT\ExpiredException' not found问题(BeforeValidException、SignatureInvalidException)

解决Firebase\JWT\ExpiredException’ not found

解决Firebase\JWT\BeforeValidException’ not found

解决Firebase\JWT\SignatureInvalidException’ not found


这几天在弄token生成验证这一块,本来想着很简单ctrl+c、ctrl+v就可以解决的事,可是遇到一些问题
情况就是:在本地使用框架thinkphp5.0,使用Firebase\JWT\JWT生成token,本地开发的时候用的composer安装的该插件,然后本地直接使用是没问题的:
//本地引入的(composer安装的)
use Firebase\JWT\JWT;

可是同步到线上,线上是没有composer的,然后就手动引入了
//生成验签
function signToken($user_id,$series_id,$user_power,$ip){
    $key="dt".$ip;      //这里是自定义的一个随机字串,应该写在config文件中的,解密时也会用,相当    于加密中常用的 盐  salt
    $token=array(
        "iss"=>$key,    //签发者 可以为空
        "aud"=>$ip,     //面象的用户,可以为空
        "iat"=>time()-3600,  //签发时间
        "nbf"=>time()-3600,    //在什么时候jwt开始生效  (这里表示生成1秒后才生效)
        "exp"=> time()+604800,  //token 过期时间,这里表示一个星期(60*60*24*7)=604800
        "data"=>[           //记录的data的信息,这里是自已添加上去的,如果有其它信息,可以再添加数组的键值对
            "series_id"=>$series_id,
            "user_id"=>$user_id,
            "power"=>$user_power
        ]
    );
    //    $jwt = JWT::encode($token, $key);  //原先写的,本地可以调用,现在线上不行,所以改为手动调用
    //  print_r($token);
    vendor('Firebase.php-jwt.src.JWT');
   // $JWT=new \Firebase\JWT\JWT();

    $jwt = \Firebase\JWT\JWT::encode($token, $key,"HS256");

    return $jwt;
}

//验证token
function checkToken(){
    vendor('Firebase.php-jwt.src.JWT');
    //$JWT=new \Firebase\JWT\JWT();
    $token=getRequestToken();
//    var_dump($token);
    $ip=getClientIp();
//    var_dump($ip);
    $key="dt".$ip;
    $status=array("meta"=>["code"=>401]);
    try {
        //JWT::$leeway = 60;//当前时间减去60,把时间留点余地
        $decoded = \Firebase\JWT\JWT::decode($token, $key, array('HS256')); //HS256方式,这里要和签发的时候对应
        $arr["data"]['token'] = (array)$decoded;
        $arr["meta"]['code']=200;
        $arr["meta"]['msg']="token验证通过";
        return $arr;

    } catch(\Firebase\JWT\SignatureInvalidException $e) { //签名不正确
        $status['meta']["msg"]="签名不正确";
        return $status;
    }catch(\Firebase\JWT\BeforeValidException $e) { // 签名在某个时间点之后才能用
        $status['meta']["msg"]="token失效";
        return $status;
    }catch(\Firebase\JWT\ExpiredException $e) { // token过期
        $status['meta']["msg"]="token失效";
        return $status;
    }catch(Exception $e) { //其他错误
        $status['meta']["msg"]="未知错误";
        return $status;
    }
}

然后上述手动引入后,一旦token验证出现异常后就总是报错:解决'Firebase\JWT\ExpiredException' not found问题(BeforeValidException、SignatureInvalidException)_第1张图片

或者:Firebase\JWT\BeforeValidException’ not found
或者:Firebase\JWT\SignatureInvalidException’ not found

**解决办法

直接在改页面头部手动引入!
下面是我的路径
解决'Firebase\JWT\ExpiredException' not found问题(BeforeValidException、SignatureInvalidException)_第2张图片
在使用JWT的头部调用:

require_once '../vendor/firebase/php-jwt/src/SignatureInvalidException.php';
require_once '../vendor/firebase/php-jwt/src/BeforeValidException.php';
require_once '../vendor/firebase/php-jwt/src/ExpiredException.php';

这样子就解决了!!


分割


分享个vue学习的教程

本人亲自维护的接口

非常适合vue零基础或者刚入门vue的小白学习。

资源包括源码、视频、接口文档,从入门到实战项目

如果你想学习vue,这里有个项目线上尝鲜地址:http://129.226.76.172:5325


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

你可能感兴趣的:(php,token,IT学习)