学习php中使用composer下载安装firebase/php-jwt 以及调用方法
学习php中使用composer下载安装firebase/php-jwt 以及调用方法
- 1、安装firebase/php-jwt
- 2、封装jwt类
1、安装firebase/php-jwt
composer require firebase/php-jwt
安装好以后出现以下文件:

2、封装jwt类
根据所使用的php框架,在指定目录创建 Token.php
<?php
use Firebase\JWT\JWT;
use Firebase\JWT\Key;
class Token
{const SECRET = 'hello';//密钥//创建tokenstatic public function create_token($uid = 1){$payload = ['iss' => 'pyg', //签发人(官方字段:非必需)'exp' => time() + 3600, //过期时间(官方字段:非必需)'aud' => 'admin', //接收人(官方字段:非必需)'nbf' => time(), //生效时间(官方字段:非必需)'iat' => time(), //签发时间(官方字段:非必需)'admin_id' => $uid, //自定义字段(用户id)];$token = JWT::encode($payload, self::SECRET, 'HS256');return $token;}//验证tokenstatic public function verify_token($token){try {// $decoded = JWT::decode($jwt, new Key($key, 'HS256'));$Result = JWT::decode($token, new Key(self::SECRET, 'HS256'));return true;} catch(\Firebase\JWT\SignatureInvalidException $e) { //签名不正确echo $e->getMessage();}catch(\Firebase\JWT\BeforeValidException $e) { // 签名在某个时间点之后才能用echo $e->getMessage();}catch(\Firebase\JWT\ExpiredException $e) { // token过期echo $e->getMessage();}catch(Exception $e) { //其他错误echo $e->getMessage();}}
}
封装好以后 下面是登录控制器
public function loginCheck(){$req = request()->param();// halt($req);// 接收工号和密码$uname = trim(input('uname'));$password = trim(input('password'));// halt($password);// 工号和密码不能为空if (empty($uname) || empty($password)) {// return '账号或密码不能为空!';return json_encode(['error' => '账号或密码不能为空!']);}// halt($uname);// 进行账号验证$data = Up::get(['uname'=>$uname]);// halt($data);if (!$data) {return json_encode(['error' => '工号不存在,请验证后输入!']);}// halt($password);// 进行密码验证if ($password != $data['password']) {// return '';return json_encode(['error' => '工号和密码不匹配!!']);}// 如果工号和密码匹配,则登录成功这才是重要的 上面代码是验证输入是否有误 并不重要 生成token$token = Token::create_token($data['admin_id']);// dump($token);// return $token;return json_encode(['token' => $token]);// session('Uname',$uname);// $this->success('登录成功!','index/index');}
最后进入其他页面验证token是否正确 我放到了Base控制器 每个页面都验证
<?php
namespace app\index\controller;
use think\Controller;
use Token;class Base extends Controller
{public function _initialize(){$this->verifyToken();}public function verifyToken(){// $token = input('token');$token ='eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJweWciLCJleHAiOjE2NzUxNDk3NzgsImF1ZCI6ImFkbWluIiwibmJmIjoxNjc1MTQ2MTc4LCJpYXQiOjE2NzUxNDYxNzgsImFkbWluX2lkIjoxfQ.bGz-MZwPDkixQQGnQ9iFpX-mZiOohJehuf114rc9zQA';$res = Token::verify_token($token);halt($res);//这里可以来判断 是否跳到登录页面}
}
token我直接写上去了 ,只为演示用,项目里是从客户端获取的来比对
相关文章:
学习php中使用composer下载安装firebase/php-jwt 以及调用方法
学习php中使用composer下载安装firebase/php-jwt 以及调用方法 1、安装firebase/php-jwt2、封装jwt类 1、安装firebase/php-jwt composer require firebase/php-jwt安装好以后出现以下文件: 2、封装jwt类 根据所使用的php框架,在指定目录创建 Token.php <?ph…...
『TypeScript』深入理解变量声明、函数定义、类与接口及泛型
📣读完这篇文章里你能收获到 了解TypeScript变量声明与类型注解掌握TypeScript函数与方法的使用掌握TypeScript类与接口的使用掌握TypeScript泛型的应用 文章目录 一、变量声明与类型注解1. 变量声明2. 类型注解3. 类型推断 二、函数与方法定义1. 函数定义2. 方法定…...
如何优雅使用 vue-html2pdf 插件生成pdf报表
使用 vue-html2pdf 插件 业务背景,老板想要一份能征服客户的pdf报表,传统的pdf要手撕,企业中确实有点耗费时间,于是github上面看到开源的这个插件就…废话不多说,直接上教程 1.使用下面命令安装 vue-html2pdf npm i…...
C语言第十六集(前)
1.关于那个整形存储入char的 是先取好补码,再截断 例: 2.%u是以十进制的形式打印无符号整数 3.注意(背):存储的char类型变量的补码为10000000的直接解析为-128 4.signed char 类型的变量取值范围是-128~127 5.unsigned char 类型的变量取值范围是0~255 6.有符号类型的变量…...
Makefile语法
一、Makefile规则格式 Makefile 里面是由一系列的规则组成的,这些规则格式如下: 目标…... : 依赖文件集合…… 命令 1 命令 2 ……参考上一节gcc编译器与Makefile入门参考这条规则 1 main: main.o input.o calcu.o2 gcc -o main main.o input.o c…...
用户案例|Milvus 助力 Credal.AI 实现 GenAI 安全与可控
AIGC 时代,企业流程中是否整合人工智能(AI)对于的企业竞争力至关重要。然而,随着 AI 不断发展演进,企业也在此过程中面临数据安全管理、访问权限、数据隐私等方面的挑战。 为了更好地解决上述问题,Credal.A…...
MySQL三 | 多表查询
目录 多表查询 内连接 隐式内连接 显示内连接 外连接 左外连接 右外连接 自连接 子查询 多表查询 笛卡尔积:集合A和集合B的所有组合情况 A * B 在多表查询时应消除无效的笛卡尔积 内连接 查询的是两张表交集的地方 隐式内连接 SELECT 字段列表 FROM 表1…...
PostgreSQL 索引介绍和使用事项
索引内容 关键点 索引是一种数据结构,用于加快数据库查询的速度。它类似于书籍的目录,可以快速定位到特定的数据页。 PG数据库支持多种类型的索引,包括B树索引、哈希索引、GiST索引、SP-GiST索引和GIN索引等。 B树索引是PG数据库中最常用的…...
MySQL注入攻防详解:保障数据库安全的最佳实践
引言 MySQL作为广泛使用的关系型数据库,其安全性一直备受关注。然而,MySQL注入攻击是一种常见而危险的安全漏洞,攻击者通过巧妙构造的输入,可以绕过应用程序的验证,执行恶意的SQL语句,导致数据泄露、篡改或…...
ubuntu or MacOS 源码安装 fmt fmtlib
1,前情 提醒这个源代码需要从release中下载 打包好的,而直接用git clone下载不了,可能github上的这个git clone的链接仅仅是给fmt lib的开发者使用的吧; 下载fmtlib的release源代码u下载fmtlib的release源代码 2,解压编…...
vue watch
vue 使用watch监听props的一些小建议 当在watch里面给data赋值,请使用深拷贝。 <template><div class"container"><div class"left"><div class"button_group"><!-- <button click"rand…...
异常检测 | 基于孤立森林(Isolation Forest)的数据异常数据检测(结合t-SNE降维可视化)
异常检测 | MATLAB实现基于孤立森林的数据异常检测 目录 异常检测 | MATLAB实现基于孤立森林的数据异常检测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 Matlab实现基于孤立森林(Isolation Forest)的数据异常数据检测可视化(完整源码和数据) 基于孤立森林(…...
【深度学习】一维数组的聚类
在学习聚类算法的过程中,学习到的聚类算法大部分都是针对n维的,针对一维数据的聚类方式较少,今天就来学习下如何给一维的数据进行聚类。 方案一:采用K-Means对一维数据聚类 Python代码如下: from sklearn.cluster im…...
100多种视频转场素材|专业胶片,抖动,光效电影转场特效PR效果预设
100多种 Premiere Pro 效果预设,包含:“胶片框架”、“胶片烧录”、“彩色LUT”、“相机抖动”、“电影Vignette”和“胶片颗粒”。非常适合制作复古风格的视频,添加独特的色彩。包括视频教程。 来自PR模板网:https://prmuban.com…...
http与apache
目录 1.http相关概念 2.http请求的完整过程 3.访问浏览器背后的原理过程 4.动态页面与静态页面区别 静态页面: 动态页面: 5.http协议版本 6.http请求方法 7.HTTP协议报文格式 8.http响应状态码 1xx:提示信息 2xx:成功…...
一、服务器准备
本案例使用VMware Workstation Pro虚拟机创建虚拟服务器来搭建Linux服务器集群,所用软件及版本如下: Centos7.7-64bit 1、三台虚拟机创建 第一种方式:通过iso镜像文件来进行安装(不推荐) 第二种方式:直接复制安装好的虚拟机文…...
区块链optimism主网节点搭建
文章目录 官方参考资料编译环境搭建编译Optimism Monorepo编译op-geth 执行下载数据快照生成op-geth和op-node通信密钥op-geth执行脚本 op-node执行脚本 启动日志op-gethop-node 本文是按照官方参考资料基于源码的方式成功搭建optimism主网节点。 官方参考资料 源码࿱…...
Bounding boxes augmentation for object detection
Different annotations formats Bounding boxes are rectangles that mark objects on an image. There are multiple formats of bounding boxes annotations. Each format uses its specific representation of bouning boxes coordinates 每种格式都使用其特定的边界框坐标…...
【计算机网络学习之路】HTTP请求
目录 前言 HTTP请求报文格式 一. 请求行 HTTP请求方法 GET和POST的区别 URL 二. 请求头 常见的Header 常见的额请求体数据类型 三. 请求体 结束语 前言 HTTP是应用层的一个协议。实际我们访问一个网页,都会像该网页的服务器发送HTTP请求,服务…...
java之字符串常用处理函数
在Java中,你可以使用Collections.sort()方法对字符串中的字符进行排序。这个方法会按照字母顺序对字符进行排序。 以下是一个例子: import java.util.Arrays; import java.util.Collections; public class Main { public static void main(…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...
Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...
2.Vue编写一个app
1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...
Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...
今日科技热点速览
🔥 今日科技热点速览 🎮 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售,主打更强图形性能与沉浸式体验,支持多模态交互,受到全球玩家热捧 。 🤖 人工智能持续突破 DeepSeek-R1&…...
关于 WASM:1. WASM 基础原理
一、WASM 简介 1.1 WebAssembly 是什么? WebAssembly(WASM) 是一种能在现代浏览器中高效运行的二进制指令格式,它不是传统的编程语言,而是一种 低级字节码格式,可由高级语言(如 C、C、Rust&am…...
ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...
NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合
在汽车智能化的汹涌浪潮中,车辆不再仅仅是传统的交通工具,而是逐步演变为高度智能的移动终端。这一转变的核心支撑,来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒(T-Box)方案:NXP S32K146 与…...
