TP8 利用jwt 生成token

使用Composer安装依赖库,终端切换到项目根目录输入如下

composer require firebase/php-jwt

下面是示例代码:

<?php
namespace app\common\base;

use Firebase\JWT\JWT;
use Firebase\JWT\Key;

class Token
{

    /**
     * 创建 token
     * @param array $data 必填 自定义参数数组
     * @param integer $exp_time 必填 token过期时间 单位:秒 例子:7200=2小时
     * @param string $scopes 选填 token标识,请求接口的token
     * @return string
     */
    public static function createToken($data = "", $exp_time = 0, $scopes = "")
    {

        //JWT标准规定的声明,但不是必须填写的;
        //iss: jwt签发者
        //sub: jwt所面向的用户
        //aud: 接收jwt的一方
        //exp: jwt的过期时间,过期时间必须要大于签发时间
        //nbf: 定义在什么时间之前,某个时间点后才能访问
        //iat: jwt的签发时间
        //jti: jwt的唯一身份标识,主要用来作为一次性token。
        //公用信息
            $key = 'api';   //自定义一个key
            $time = time(); //当前时间
            $token['iss'] = ''; //签发者 可选
            $token['aud'] = ''; //接收该JWT的一方,可选
            $token['iat'] = $time; //签发时间
            $token['nbf'] = $time; //(Not Before):某个时间点后才能访问,比如设置time+30,表示当前时间30秒后才能使用
            if ($scopes) {
                $token['scopes'] = $scopes; //token标识,请求接口的token
            }
            if (!$exp_time) {
                $exp_time = 7200*12;//默认=24小时过期
            }
            $token['exp'] = $time + $exp_time; //token过期时间,这里设置2个小时
            if ($data) {
                $token['data'] = $data; //自定义参数
            }
            $alg = 'HS256'; //签名算法方式
//            $keyId = "keyId"; //这个有时必须要加上,不加上,报错,报错内容:'"kid" empty, unable to lookup correct key'
            $jwt = JWT::encode($token, $key, $alg);
            return $jwt; //返回给客户端token信息
    }

    /**
     * 验证token是否有效,默认验证exp,nbf,iat时间
     * @param string $jwt 需要验证的token
     * @return string $msg 返回消息
     */
    public static function explainToken($jwt)
    {
        $key = new Key('api', 'HS256'); // 必须是 Firebase\JWT\Key;的对象
        JWT::$leeway = 60;//当前时间减去60,把时间留点余地
        try {
            $decoded = JWT::decode($jwt, $key);
            $arr = (array)$decoded;
            $returndata['code'] = "200";//200=成功
            $returndata['msg'] = "成功";//
            $returndata['data'] = $arr;//返回的数据
            return json_encode($returndata); //返回信息
        } catch (\Firebase\JWT\SignatureInvalidException $e) {  //签名不正确
            $returndata['code'] = "101";//101=签名不正确
            $returndata['msg'] = $e->getMessage();
            $returndata['data'] = "";//返回的数据
            return json_encode($returndata); //返回信息
        } catch (\Firebase\JWT\BeforeValidException $e) {  // 签名在某个时间点之后才能用
            $returndata['code'] = "102";//102=签名不正确
            $returndata['msg'] = $e->getMessage();
            $returndata['data'] = "";//返回的数据
            return json_encode($returndata); //返回信息
        } catch (\Firebase\JWT\ExpiredException $e) {  // token过期
            $returndata['code'] = "103";//103=签名不正确
            $returndata['msg'] = $e->getMessage();
            $returndata['data'] = "";//返回的数据
            return json_encode($returndata); //返回信息
        } catch (Exception $e) {  //其他错误
            $returndata['code'] = "199";//199=签名不正确
            $returndata['msg'] = $e->getMessage();
            $returndata['data'] = "";//返回的数据
            return json_encode($returndata); //返回信息
        }
    }








}

相关推荐

  1. TP8 利用jwt 生成token

    2024-04-29 19:54:02       9 阅读
  2. Jwt生成token以及解析token

    2024-04-29 19:54:02       28 阅读
  3. PHP利用JWT refresh_token获取新access_token

    2024-04-29 19:54:02       12 阅读
  4. JWT使用HS512算法生成全局服务token原理

    2024-04-29 19:54:02       45 阅读
  5. k8s admin 用户生成token

    2024-04-29 19:54:02       17 阅读
  6. JWT令牌(Token)设计

    2024-04-29 19:54:02       35 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-29 19:54:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-29 19:54:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-29 19:54:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-29 19:54:02       18 阅读

热门阅读

  1. Nginx自定义状态码499出现原因

    2024-04-29 19:54:02       10 阅读
  2. 建造者模式(装修公司装修套餐)

    2024-04-29 19:54:02       12 阅读
  3. curl_opt参数解析

    2024-04-29 19:54:02       11 阅读
  4. TensorFlow框架介绍-深度学习

    2024-04-29 19:54:02       12 阅读
  5. 十大经典排序算法之希尔排序。

    2024-04-29 19:54:02       11 阅读
  6. 单例模式代码简单演示

    2024-04-29 19:54:02       8 阅读