写在前面

JWT在现在的开发环境下,用的还是比较多的

所以我写了一个JWT的操作类库,很方便调用

代码

特点:

  1. 使用目前的"firebase/php-jwt": "^6.9"版本库
  2. 可以使用静态方法setParm设置签发的属性值
  3. encodedecode方法都不需要实例化就可以使用,调用也比较简单
<?php

declare (strict_types = 1);

namespace app\util;

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

/**
 * 操作 Jwt 的工具类
 */
class JwtTool
{
    // 加密的秘钥
    private static $key = "sdjfaSsdifo@sd#ohr.ree3soid3hf15";
    // 签发者
    private static $iss = "xxx";
    // 在什么时间后可用
    private static $nbf = 0;
    // 过期时间
    private static $exp = 60;
    // 错误信息
    private static $errMsg = '';
    // 面向的用户
    private static $aud = "All users";

    // 设置基础参数值
    public static function setParm($parmName = '',$parmVal = '')
    {
        self::$$parmName = $parmVal;
        return self::class;
    }

    // 加密普通数据
    public static function encode(Array $data = [])
    {
        if (empty($data)) return null;

        $key = self::$key;
        $time = time();
        $token = [
            "iss" => self::$iss,// 签发者
            "aud" => self::$aud,// 面向的用户
            "iat" => $time,// 签发时间
            "nbf" => $time + self::$nbf,// 在什么时间之后该jwt才可用
            'exp' => $time + self::$exp, // 过期时间
            'data' => $data
        ];

        return JWT::encode($token, $key, 'HS256');
    }

    // 解密 Jwt 字符串为可读数组/对象
    public static function decode(String $jwt='')
    {
        if (empty($jwt)) return null;

        $data = [];
        try {
            $parseJwtResult = JWT::decode($jwt, new Key(self::$key, 'HS256'));
            $data = (Array)$parseJwtResult ->data;
            $data["iat"] = $parseJwtResult -> iat;
            $data["exp"] = $parseJwtResult -> exp;
            $data["nbf"] = $parseJwtResult -> nbf;
        } catch (\Exception $e) {
            $parseJwtResult = $e -> getMessage();
            self::$errMsg = $parseJwtResult;
            $data = null;
        }
        return $data;
    }

    // 获取错误信息
    public static function getErrorMsg()
    {
        return self::$errMsg;
    }
}

开箱用法

  1. 安装JWT库:composer require firebase/php-jwt@6.9
  2. 修改命名空间,调整为你合适的位置
  3. 修改这些配置项的默认值:加密的秘钥、签发者、在什么时间后可用、过期时间、错误信息、面向的用户
  4. 调用即可

加密

<?php
$user = [
    'id' => 1,
    'name' => '张三',
];
$jwt = JwtTool::encode($user);

return $jwt;

解密

<?php
$jwt = "sdafndfn.dsfadsf.sdfad";
$user = JwtTool::decode($jwt);

return $user;

工具类

最后修改:2025 年 07 月 11 日
如果您对各种技术博客文章感兴趣,欢迎关注拓行公众号,分享各种专业技术知识~