写在前面
JWT
在现在的开发环境下,用的还是比较多的
所以我写了一个JWT
的操作类库,很方便调用
代码
特点:
- 使用目前的
"firebase/php-jwt": "^6.9"
版本库 - 可以使用静态方法
setParm
设置签发的属性值 encode
和decode
方法都不需要实例化就可以使用,调用也比较简单
<?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;
}
}
开箱用法
- 安装
JWT
库:composer require firebase/php-jwt@6.9
- 修改命名空间,调整为你合适的位置
- 修改这些配置项的默认值:加密的秘钥、签发者、在什么时间后可用、过期时间、错误信息、面向的用户
- 调用即可
加密
<?php
$user = [
'id' => 1,
'name' => '张三',
];
$jwt = JwtTool::encode($user);
return $jwt;
解密
<?php
$jwt = "sdafndfn.dsfadsf.sdfad";
$user = JwtTool::decode($jwt);
return $user;