laravel10使用firebase/php-jwt 6.0

话不多说,直接上示例

<?php
/**
 * Created by PhpStorm
 * User: xxx 根据自己情况设置
 * Date: 2024/3/20
 * Time: 15:53
 * Brief:
 * docs:
 */

namespace App\lib\jwt;


use App\Exceptions\BaseException;
use Exception;
use Firebase\JWT\JWT;
use Firebase\JWT\Key;

class JwtUtil
{
    //编码
    public function encode()
    {
        $key = env('JWT_SECRET'); //key要和签发的时候一样
        $time = time(); //当前时间
        $token = [
            'iss' => 'http://www.helloweba.net', //签发者 可选
            'aud' => 'http://www.helloweba.net', //接收该JWT的一方,可选
            'iat' => $time, //签发时间
            'nbf' => $time, //(Not Before):某个时间点后才能访问,比如设置time+30,表示当前时间30秒后才能使用
            'exp' => $time + 7200, //过期时间,这里设置2个小时
            'data' => [ //自定义信息,不要定义敏感信息
                'userid' => 1,
                'username' => '李小龙'
            ]
        ];

        $keyId = "keyId";

        return JWT::encode($token, $key, 'HS256',$keyId); //输出Token,指定签发方式
    }

    //解码
    public function decode($jwt)
    {
        $key_1 = env('JWT_SECRET'); //key要和签发的时候一样

        try {
            JWT::$leeway = 60;//当前时间减去60,把时间留点余地

            $key = new Key($key_1, 'HS256');

            $decoded = JWT::decode($jwt, $key ); //HS256方式,这里要和签发的时候对应
            $arr = (array)$decoded;
            return $arr;
        } catch (\Firebase\JWT\SignatureInvalidException $e) {  //签名不正确
            throw new BaseException(100,'令牌错误');
        } catch (\Firebase\JWT\BeforeValidException $e) {  // 签名在某个时间点之后才能用
            throw new BaseException(200,'令牌未开始使用');
        } catch (\Firebase\JWT\ExpiredException $e) {  // token过期
            throw new BaseException(300,'令牌已过期');
        } catch (Exception $e) {  //其他错误
            throw new BaseException(500,$e->getMessage());
        }
    }

}

这里有一个比较坑的地方,JWT::decode()中第二个参数,是一个对象

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值