学习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我直接写上去了 ,只为演示用,项目里是从客户端获取的来比对

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DevOps搭建(二)-VMware安装虚拟机详细步骤

1、下载Centos镜像 官方下载地址: Download 这里我们使用Centos7镜像 下载地址: Index of /centos/7.9.2009/isos/x86_64/ 2、设置固定IP 2.1、VMware的配置 首先打开编辑里面的 虚拟网络编辑器,如图: 进入更改设置之后,进行后面的操作,

UNDERSTANDING AND IMPROVING INFORMATION TRANSFER IN MULTI-TASK LEARNING

Z i _i i​ X i R i X_iR_i Xi​Ri​&#xff0c; X X X是Task embedding layers&#xff0c; R R R是Alignment matrices 辅助信息 作者未提供代码

Vue框架学习笔记——列表渲染:v-for

文章目录 前文提要代码正文 前文提要 本人仅做个人学习记录&#xff0c;如有错误&#xff0c;请多包涵 主要学习链接&#xff1a;尚硅谷Vue2.0Vue3.0全套教程丨vuejs从入门到精通 代码正文 <body><div id"box"><ul><li v-for"(p,index)…

EI级 | Matlab实现TCN-GRU-Multihead-Attention多头注意力机制多变量时间序列预测

EI级 | Matlab实现TCN-GRU-Multihead-Attention多头注意力机制多变量时间序列预测 目录 EI级 | Matlab实现TCN-GRU-Multihead-Attention多头注意力机制多变量时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.【EI级】Matlab实现TCN-GRU-Multihead-Attention…

视频剪辑转码:mp4批量转成wmv视频,高效转换格式

在视频编辑和处理的领域&#xff0c;转换格式是一项常见的任务。在某些编辑和发布工作中&#xff0c;可能需要使用WMV格式。提前将素材转换为WMV可以节省在编辑过程中的时间和精力。从MP4到WMV的批量转换&#xff0c;不仅能使视频素材在不同的平台和设备上得到更好的兼容性&…

ESP32 freeRTOS笔记 参数传递、任务优先级

一、四种参数传递方式 1.1 整数传递 使用 (void *) 任何类型传递参数&#xff0c;通过地址传递给任务。 #include <stdio.h> #include "sdkconfig.h" #include "freertos/FreeRTOS.h" #include "freertos/task.h"void myTask(void *pvP…

前端笔记(三)CSS 盒子模型

结构伪类选择器 基本的结构伪类选择器 可以根据元素的结构关系来查找元素 比如列标签 li&#xff0c;使用 li:first-child { background-color: green; }就可以选中第一个该标签。 <!DOCTYPE html> <html lang"en"> <head><meta charset&q…

JavaWeb 前端工程化

前端工程化是使用软件工程的方法来单独解决前端的开发流程中模块化、组件化、规范化、自动化的问题,其主要目的为了提高效率和降低成本。 前端工程化实现技术栈 前端工程化实现的技术栈有很多,我们采用ES6nodejsnpmViteVUE3routerpiniaaxiosElement-plus组合来实现 ECMAScri…

spring cloud 整合Feign经行远程调用

文章目录 Feign远程调用Feign替代RestTemplate1&#xff09;引入依赖2&#xff09;添加注解3&#xff09;编写Feign的客户端4&#xff09;测试5&#xff09;总结 自定义配置配置文件方式Java代码方式 Feign使用优化 Feign远程调用 先来看我们以前利用RestTemplate发起远程调用…

【Vue】使用 Vue CLI 脚手架创建 Vue 项目(使用GUI创建)

前言 在开始使用Vue进行开发之前&#xff0c;我们需要先创建一个Vue项目。Vue CLI&#xff08;Command Line Interface&#xff09;是一个官方提供的脚手架工具&#xff0c;可以帮助我们快速创建Vue项目。Vue CLI也提供了一个可视化的GUI界面来创建和管理Vue项目。 步骤 打开终…

MQ - KAFKA 高级篇

kafak是一个分布式流处理平台,提供消息持久化,基于发布-订阅的方式的消息中间件&#xff0c;同时通过消费端配置相同的groupId支持点对点通信。 ##适用场景&#xff1a; 构造实时流数据管道,用于系统或应用之间可靠的消息传输.数据采集及处理,例如连接到一个数据库系统,捕捉表…

SASE:网络与安全的未来之路

随着数字化时代的到来&#xff0c;企业和个人对网络连接和安全性的需求日益增长。传统的网络架构已经无法满足这些需求&#xff0c;因此&#xff0c;新兴的网络和安全框架SASE&#xff08;Secure Access Service Edge&#xff09;应运而生。本文将介绍什么是SASE&#xff0c;并…