tp框架加入jwt校验

​composer安装依赖

composer require firebase/php-jwt
const key = 'key_for_jwt';
const alg = 'HS256';
// 过期时间
const exp_time = 86400;

三个参数根据业务需求自行设置就好

生成jwt代码:

/**
 * @Notes: 生成jwt token
 * @param array $param
 * @return string
 * @Time: 2024/5/9 下午2:52
 */
public static function createJwtToken(array $param = []): string
{
    $jwtData = [
        'lat'       => time(),
        'nbf'       => time(),
        'exp'       => bcadd(time(), self::exp_time),
    ];
    unset($param['lat'], $param['nbf'], $param['exp']);
    $jwtData = array_merge($jwtData, $param);

    return JWT::encode($jwtData, self::key, self::alg);
}

生成如下结果:

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsYXQiOjE3MTUzMjM4NDgsIm5iZiI6MTcxNTMyMzg0OCwiZXhwIjoiMTcxNTMyNDg0OCIsInVzZXJfaWQiOjEwMDg2fQ.afHvKlWLolLItnBvuOe33ZoBJndl8rBU_rCh-QOGwqA

解析jwt代码

/**
 * @Notes:解析jwt token
 * @param string $token
 * @return array
 * @Time: 2024/5/9 下午2:55
 */
public static function parseJwtToken(string $token): array
{
    return (array)JWT::decode($token, new Key(self::key, self::alg));
}

解析结果:

Array
(
    [lat] => 1715323848
    [nbf] => 1715323848
    [exp] => 1715324848
    [user_id] => 10086
)

要注意的是, JWT有很多Exception,最好做兼容

/**
 * @Notes: 校验token
 * @param string $token
 * @return array
 * @Time: 2024/5/9 下午3:05
 */
public static function checkJwtToken(string $token): array
{
    $jwtData = [];
    try {
        $jwtData = self::parseJwtToken($token);
    } catch (ExpiredException|SignatureInvalidException|BeforeValidException $e) {
        return [false, $jwtData];
    }
    if (empty($jwtData)) {
        return [false, $jwtData];
    }
    if (time() > $jwtData['exp']) {
        return [false, $jwtData];
    }
    return [true, $jwtData];
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值