当前位置: 首页 > news >正文

学习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.lryc.cn/news/255076.html

相关文章:

  • 『TypeScript』深入理解变量声明、函数定义、类与接口及泛型
  • 如何优雅使用 vue-html2pdf 插件生成pdf报表
  • C语言第十六集(前)
  • Makefile语法
  • 用户案例|Milvus 助力 Credal.AI 实现 GenAI 安全与可控
  • MySQL三 | 多表查询
  • PostgreSQL 索引介绍和使用事项
  • MySQL注入攻防详解:保障数据库安全的最佳实践
  • ubuntu or MacOS 源码安装 fmt fmtlib
  • vue watch
  • 异常检测 | 基于孤立森林(Isolation Forest)的数据异常数据检测(结合t-SNE降维可视化)
  • 【深度学习】一维数组的聚类
  • 100多种视频转场素材|专业胶片,抖动,光效电影转场特效PR效果预设
  • http与apache
  • 一、服务器准备
  • 区块链optimism主网节点搭建
  • Bounding boxes augmentation for object detection
  • 【计算机网络学习之路】HTTP请求
  • java之字符串常用处理函数
  • 【XILINX】ERROR:Place:1136 - This design contains a global buffer instance
  • 【文件上传系列】No.0 利用 FormData 实现文件上传、监控网路速度和上传进度(原生前端,Koa 后端)
  • web前端之JavaScrip的笔试题
  • 生活、工作常用API免费接口
  • PHP使用mkcert本地开发生成HTTPS证书 PhpEnv集成环境
  • DHTMLX Scheduler PRO 6.0.5 Crack
  • AddressSanitizer和LeakSanitizer有什么区别
  • CoreDNS实战(二)-CoreDNS+ETCD实现DNS服务发现
  • B站缓存视频M4S合并MP4(js + ffmpeg )
  • 学习IO的第四天
  • Linux:缓冲区的概念理解