学习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';//密钥
    //创建token
    static 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;
    }
    //验证token
    static 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我直接写上去了 ,只为演示用,项目里是从客户端获取的来比对

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/218667.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

llama.cpp部署(windows)

一、下载源码和模型 下载源码和模型 # 下载源码 git clone https://github.com/ggerganov/llama.cpp.git# 下载llama-7b模型 git clone https://www.modelscope.cn/skyline2006/llama-7b.git查看cmake版本&#xff1a; D:\pyworkspace\llama_cpp\llama.cpp\build>cmake --…

Angular 进阶之四:SSR 应用场景与局限

应用场景 内容丰富&#xff0c;复杂交互的动态网页&#xff0c;对首屏加载有要求的项目&#xff0c;对 seo 有要求的项目&#xff08;因为服务端第一次渲染的时候&#xff0c;已经把关键字和标题渲染到响应的 html 中了&#xff0c;爬虫能够抓取到此静态内容&#xff0c;因此更…

修改python打包后的窗体图标、任务栏图标、exe图标

前言 我python开发的GUI界面(图形用户界面)一直是tkinter&#xff0c;打包exe一直是Pyinstaller。但是打包出来的exe图标、状态栏图标、窗体左上角图标一直是默认的羽毛&#xff0c;我想自定义。 效果 最后使用base64创建临时ico解决了该问题 步骤 创建icoToBase64.py&am…

如何使用 Oracle SQL Developer 连接 pgvector

如何使用 Oracle SQL Developer 连接 pgvector 1. 下载 postgresql 的 jdbc 驱动2. Oracle SQL Developer 配置第三方驱动3. Oracle SQL Developer 配置 postgres 连接 1. 下载 postgresql 的 jdbc 驱动 访问 https://jdbc.postgresql.org/download/&#xff0c;下载驱动&…

09.复刻ChatGPT,自我进化,AI多智能体

文章目录 复刻ChatGPT原因准备开整ALpacaVicuna GPT-4 EvaluationDolly 2.0其他合集Self-improve 自我进化表现形式法1&#xff1a;自我催眠法2&#xff1a;Agent交互法3&#xff1a;ReasonAct AI多智能体AI规划角色的一天加入亿点点细节&#xff08;外界刺激&#xff09;Refle…

STM32存储左右互搏 SPI总线读写FRAM MB85RS16

STM32存储左右互搏 I2C总线读写FRAM MB85RS16 在中低容量存储领域&#xff0c;除了FLASH的使用&#xff0c;&#xff0c;还有铁电存储器FRAM的使用&#xff0c;相对于FLASH&#xff0c;FRAM写操作时不需要预擦除&#xff0c;所以执行写操作时可以达到更高的速度&#xff0c;其…

【教程】苹果推送证书的创建和使用流程详解

摘要 本篇博客主要介绍了苹果推送证书的使用流程。首先&#xff0c;在苹果开发者中心创建推送证书&#xff0c;然后在应用程序中使用该证书进行消息推送。文章详细说明了创建推送证书的步骤&#xff0c;并提供了在应用程序中注册推送服务、发送推送消息以及处理推送消息的相关…

深入浅出理解kafka ---- 万字总结

1.Kafka简介 Kafka 本质上是一个 MQ&#xff08;Message Queue&#xff09;&#xff0c;使用消息队列的优点&#xff1a; 解耦&#xff1a;允许独立的扩展或修改队列两边的处理过程。可恢复性&#xff1a;即使一个处理消息的进程挂掉&#xff0c;加入队列中的消息仍然可以在系…

赛氪网荣膺地理标志语言服务教育与实践基地联盟理事会员单位

随着地理标志产品推介需求的持续扩大&#xff0c;知识产权保护和语言服务行业面临着新的挑战和机遇。在这个背景下&#xff0c;知识产权出版社指导下的地理标志语言服务教育与实践基地联盟应运而生&#xff0c;旨在推动地理标志产品的推广和知识产权保护。赛氪网作为项目运营方…

单行文本溢出,多行文本溢出的省略样式

单行文本溢出 效果&#xff1a; html <div>你好呀&#xff01;你好呀&#xff01;你好呀&#xff01;你好呀&#xff01;你好呀&#xff01;你好呀&#xff01;你好呀&#xff01;你好呀&#xff01;你好呀&#xff01;</div> css: <style>div{width: 300p…

Python中的内省与反射机制及其应用场景

1. 概述 在计算机学中&#xff0c;反射式编程&#xff08;英语&#xff1a;reflective programming&#xff09;或反射&#xff08;英语&#xff1a;reflection&#xff09;&#xff0c;是指计算机程序在运行时&#xff08;runtime&#xff09;可以访问、检测和修改它本身状态或…

C++基础 -40- STL库之Vectors向量容器

Vectors 包含着一系列连续存储的元素,类似数组。 Vectors 定义格式&#xff08;需要调用头文件&#xff09; 赋值 遍历 全部代码段 #include "iostream" #include "vector" using namespace std;int main() {//定义vector<string> array1;//使…

【数据结构】顺序栈与链栈

栈的特点是后进先出或先进后出&#xff0c;简称LIFO或FILO&#xff0c;通常top时刻表示栈顶的位置序号&#xff0c;一般空栈时top-1&#xff1b;入栈栈顶指针加1&#xff0c;s->top;出栈栈顶指针减1&#xff0c;s->top-- 【顺序栈】 定义&#xff1a; typedef struct {…

synchronized底层原理(二)

书接上文 文章目录 1. 锁升级原理2. Synchronized锁优化1. 偏向锁批量重偏向&批量撤销2. 自旋优化3. 锁粗化4. 锁消除 1. 锁升级原理 前面介绍了对象的几种加锁状态&#xff0c;分别是无锁、偏向锁、轻量级锁和重量级锁。有下面几个关键点&#xff1a; 当开启JVM偏向延迟…

外贸电商ERP品牌有哪些

随着现代物流科技的发展进步&#xff0c;外贸电商行业也迎来新的发展阶段&#xff0c;各种经营数据的统计分析工作量较大。同时还有不少商贸企业经营管理工作涉及多货币、多汇率核算、多店铺数据协同、多业务模式等&#xff0c;而想要高效处理这些事务&#xff0c;传统的管理模…

游戏开发增笑-扣扣死-Editor的脚本属性自定义定制-还写的挺详细的,旧版本反而更好

2012年在官方论坛注册的一个号&#xff0c;居然被禁言了&#xff0c;不知道官方现在是什么辣鸡&#xff0c;算了&#xff0c;大人不记狗子过 ”后来提交问题给CEO了&#xff0c;结果CEO百忙之中居然回复了&#xff0c;也是很低调的一个人&#xff0c;毕竟做技术的有什么坏心思呢…

数据结构与算法编程题41

线性表中各结点的检索概率不等时&#xff0c;可用如下策略提高顺序检索的效率&#xff1a; 若找到指定的结点&#xff0c;则将该结点和其前驱结点&#xff08;若存在&#xff09;交换&#xff0c;使得经常被检索 的结点尽量位于表的前端。试设计在顺序结构的线性表上实现上述策…

Linux中项目部署步骤

安装jdk&#xff0c;tomcat 安装步骤 1&#xff0c;将压缩包&#xff0c;拷贝到虚拟机中。 通过工具&#xff0c;将文件直接拖到虚拟机的/home下 2&#xff0c;回到虚拟机中&#xff0c;查看/home下&#xff0c;有两个压缩文件 3&#xff0c;给压缩文件做解压缩操作 tar -z…

vue项目解决计算后浮点数精度问题

1.1 问题描述 计算出的结果本来应该为13.8386&#xff0c;但是这里因为js精度问题&#xff0c;导致后边多了一串的0000001。 1.2 使用场景 求和&#xff0c;每个物品的单价*数量 1.3 解决办法 引入第三方库Decimal 1.4 vue项目中Decimal安装步骤 1.4.1 安装Decimal np…

【Cesium】模型平面裁切

const scene viewer.scene;let tileset; let targetY 400.0; let planeEntities []; let selectedPlane; // 选择的切面 let clippingPlanes; // 切面属性// 当鼠标点击切面时&#xff0c;修改相关属性 const downHandler new Cesium.ScreenSpaceEventHandler(viewer.sce…