TP8 利用jwt 生成token

2024-04-26 16:12
文章标签 生成 token jwt tp8

本文主要是介绍TP8 利用jwt 生成token,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

composer require firebase/php-jwt

下面是示例代码:

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

这篇关于TP8 利用jwt 生成token的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/938037

相关文章

Python从Word文档中提取图片并生成PPT的操作代码

《Python从Word文档中提取图片并生成PPT的操作代码》在日常办公场景中,我们经常需要从Word文档中提取图片,并将这些图片整理到PowerPoint幻灯片中,手动完成这一任务既耗时又容易出错,... 目录引言背景与需求解决方案概述代码解析代码核心逻辑说明总结引言在日常办公场景中,我们经常需要从 W

C#使用Spire.XLS快速生成多表格Excel文件

《C#使用Spire.XLS快速生成多表格Excel文件》在日常开发中,我们经常需要将业务数据导出为结构清晰的Excel文件,本文将手把手教你使用Spire.XLS这个强大的.NET组件,只需几行C#... 目录一、Spire.XLS核心优势清单1.1 性能碾压:从3秒到0.5秒的质变1.2 批量操作的优雅

Python使用python-pptx自动化操作和生成PPT

《Python使用python-pptx自动化操作和生成PPT》这篇文章主要为大家详细介绍了如何使用python-pptx库实现PPT自动化,并提供实用的代码示例和应用场景,感兴趣的小伙伴可以跟随小编... 目录使用python-pptx操作PPT文档安装python-pptx基础概念创建新的PPT文档查看

在ASP.NET项目中如何使用C#生成二维码

《在ASP.NET项目中如何使用C#生成二维码》二维码(QRCode)已广泛应用于网址分享,支付链接等场景,本文将以ASP.NET为示例,演示如何实现输入文本/URL,生成二维码,在线显示与下载的完整... 目录创建前端页面(Index.cshtml)后端二维码生成逻辑(Index.cshtml.cs)总结

Python实现数据可视化图表生成(适合新手入门)

《Python实现数据可视化图表生成(适合新手入门)》在数据科学和数据分析的新时代,高效、直观的数据可视化工具显得尤为重要,下面:本文主要介绍Python实现数据可视化图表生成的相关资料,文中通过... 目录前言为什么需要数据可视化准备工作基本图表绘制折线图柱状图散点图使用Seaborn创建高级图表箱线图热

SQLServer中生成雪花ID(Snowflake ID)的实现方法

《SQLServer中生成雪花ID(SnowflakeID)的实现方法》:本文主要介绍在SQLServer中生成雪花ID(SnowflakeID)的实现方法,文中通过示例代码介绍的非常详细,... 目录前言认识雪花ID雪花ID的核心特点雪花ID的结构(64位)雪花ID的优势雪花ID的局限性雪花ID的应用场景

springboot项目中集成shiro+jwt完整实例代码

《springboot项目中集成shiro+jwt完整实例代码》本文详细介绍如何在项目中集成Shiro和JWT,实现用户登录校验、token携带及接口权限管理,涉及自定义Realm、ModularRe... 目录简介目的需要的jar集成过程1.配置shiro2.创建自定义Realm2.1 LoginReal

SpringBoot集成Shiro+JWT(Hutool)完整代码示例

《SpringBoot集成Shiro+JWT(Hutool)完整代码示例》ApacheShiro是一个强大且易用的Java安全框架,提供了认证、授权、加密和会话管理功能,在现代应用开发中,Shiro因... 目录一、背景介绍1.1 为什么使用Shiro?1.2 为什么需要双Token?二、技术栈组成三、环境

Django HTTPResponse响应体中返回openpyxl生成的文件过程

《DjangoHTTPResponse响应体中返回openpyxl生成的文件过程》Django返回文件流时需通过Content-Disposition头指定编码后的文件名,使用openpyxl的sa... 目录Django返回文件流时使用指定文件名Django HTTPResponse响应体中返回openp

python生成随机唯一id的几种实现方法

《python生成随机唯一id的几种实现方法》在Python中生成随机唯一ID有多种方法,根据不同的需求场景可以选择最适合的方案,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习... 目录方法 1:使用 UUID 模块(推荐)方法 2:使用 Secrets 模块(安全敏感场景)方法