tp5 使用 jwt 使用以及遇到的坑

162 阅读1分钟

一、安装:
1.运行下面命令

    composer require firebase/php-jwt

2.这里运行的时候遇到了一个问题

437f680bc55d298ceac17e7e2d7f905.png

这里的意思大概就是你是composer版本1需要升级为版本2运行下面代码升级为2

 composer self-update --2

然后在运行上面的代码这里应该就完了

二、使用

这里我的jwt是最新的版本,就直接用我代码就是了

use Firebase\JWT\ExpiredException;

require_once ROOT_PATH. 'vendor/firebase/php-jwt/src/JWT.php';

class Jwt{


    public static $key = "qhyjwt";

    /**
     * @return array 设置token
     */
    public static function getToken(){
        $key = self::$key;  //这里是自定义的一个随机字串,应该写在config文件中的,解密时也会用,相当    于加密中常用的 盐  salt
        $token = [
            "iss"=>"",  //签发者 可以为空
            "aud"=>"", //面象的用户,可以为空
            "iat" => time(), //签发时间
//            "nbf" => time()+100, //在什么时候jwt开始生效  (这里表示生成100秒后才生效)
            "nbf" => time(), //在什么时候jwt开始生效  (这里表示生成100秒后才生效)
            "exp" => time()+7200, //token 过期时间
            "uid" => 2 //记录的userid的信息,这里是自已添加上去的,如果有其它信息,可以再添加数组的键值对
        ];
        $JWT = new \Firebase\JWT\JWT();
        $jwt = $JWT::encode($token,$key,"HS256"); //根据参数生成了 token
//        return json([
//            "token"=>$jwt
//        ]);
        return ['code'=>200,'msg'=>'成功','data'=>$jwt];
    }


    /** 解密token
     * @param $token 上面生成的token
     * @return array
     */
    public static function check($token){

        $key = self::$key;  //上一个方法中的 $key 本应该配置在 config文件中的
        $JWT = new \Firebase\JWT\JWT();
        $info = $JWT::decode($token,$key,array('HS256')); //解密jwt 老版

        return ['code'=>200,'msg'=>'成功','data'=>$info];
    }

如果老版本的jwt应该就对了,新的jwt可能直接check方法会报一个错误、

image.png
在check方法中引入Key文件,然后把老版本解密注释,用新版的解密就好了

require_once ROOT_PATH. 'vendor/firebase/php-jwt/src/Key.php';
try {
    $checkArray = $JWT::decode($token, new \Firebase\JWT\Key($key, 'HS256')); //解密jwt 新版
}catch (ExpiredException  $e){
    $checkArray = $e->getMessage();
}


image.png

小伙伴们!这样就完成了哦! QQ学习交流群:842167453 ,欢迎小伙伴加入一起学习。