TP8 利用jwt 生成token

devtools/2024/10/18 2:29:49/

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

composer require firebase/php-jwt

下面是示例代码:

php"><?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); //返回信息}}}


http://www.ppmy.cn/devtools/23435.html

相关文章

Java8 Stream常见用法

Stream流的常见用法&#xff1a; 1.利用stream流特性把数组转list集合 //定义一个数组Integer[] array {5,2,1,6,4,3};//通过stream特性把数组转list集合List<Integer> list Arrays.stream(array).collect(Collectors.toList());//打印结果System.out.println(list);…

计算机系统概述试题

01&#xff0e;完整的计算机系统应包括()。 A.运算器、存储器、控制器 B.外部设备和主机 C.主机和应用程序 D.配套的硬件设备和软件系统 02.冯诺依曼机的基本工作方式是()。 A.控制流驱动方式 B.多指令多数据流方式 C.微程序控制方式 D.数据流驱动方式 03.下列()是冯诺依曼机…

笔试刷题-Day10

牛客 一、DP30买卖股票的最好时机&#xff08;一&#xff09; 算法&#xff1a;虽然题目标了DP但是用贪心更快页更容易理解 import java.util.Scanner;// 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main {public static void main(String[] args) {Sca…

同步与异步

异步与同步的区别 异步编程的主要优势在于它能够利用IO等待时间&#xff0c;提高系统的并发性能和吞吐量。当涉及到需要等待IO操作&#xff08;例如网络请求、数据库查询等&#xff09;完成时&#xff0c;异步编程可以使其他任务继续执行&#xff0c;而不需要阻塞整个程序。 …

Kindling-OriginX v1.3.0 发布:自动关联锁堆栈与锁时间,精准定位问题代码;新增代码火焰图,识别热点代码段

本次更新中&#xff0c;Kindling-OriginX 创新性地实现了慢故障 Trace 与代码堆栈的自动化关联。对于由于代码中锁问题导致的慢故障&#xff0c;可以快速通过“锁耗时分析”能力定位到相关代码堆栈&#xff0c;确定问题代码段。 针对性能分析往往较复杂&#xff0c;无法快速定…

23种设计模式简单记录

23种设计模式主要分为三大类&#xff1a;创建型模式、结构型模式和行为型模式。下面是这些设计模式的概览&#xff1a; 创建型模式&#xff08;Creational Patterns&#xff09; 单例模式&#xff08;Singleton&#xff09;&#xff1a;确保一个类只有一个实例&#xff0c;并…

基于Springboot+Mybatis-Plus+mysql+html旅游网站

博主介绍&#xff1a; 大家好&#xff0c;本人精通Java、Python、C#、C、C编程语言&#xff0c;同时也熟练掌握微信小程序、Php和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我有丰富的成品Java、Python、C#毕设项目经验&#xff0c;能够为学生提供各类…

力扣HOT100 - 78. 子集

解题思路&#xff1a; class Solution {public List<List<Integer>> subsets(int[] nums) {List<List<Integer>> lists new ArrayList<>(); // 解集lists.add(new ArrayList<Integer>()); // 首先将空集加入解集中for(int i 0; i < n…