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

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


http://www.kler.cn/news/162299.html

相关文章:

  • 细粒度视觉分类的注意内核编码网络
  • 美国Linux服务器的iptables防火墙介绍
  • 超详细介绍Ubuntu系统安装CUDA和cuDNN【一站式服务!!!】
  • 布匹瑕疵图像识别的CNN模型设计
  • 大数据的技术栈-逐步完善
  • 使用命令行移除VSAN中故障磁盘
  • kali linux入门及常用简单工具介绍(非常详细)从零基础入门到精通,看完这一篇就够了
  • SpringMVC 案例
  • 微前端个人理解与简单总结
  • 对Spring源码的学习:一
  • 机房动力环境智能监控系统
  • 离高薪测试你可能只差这个理解:python 内存管理机制
  • postgresql pg_hba.conf 配置详解
  • 首次面试经历(忘指导)当我在简历上写了苍穹外卖,瑞吉外卖时……
  • Selenium自动化测试总结
  • 图像处理之把模糊的图片变清晰
  • jira创建用例,与任务关联
  • flask web开发学习之初识flask(三)
  • 从零开发短视频电商 在AWS上用SageMaker部署开源模型并用Java SDK调用
  • 录视频人不在电脑旁,怎么设置定时关机
  • Oracle Flashback示例集锦
  • Flutter 如何更新showModalBottomSheet 中的数据
  • c# 判断是否连接公网
  • ElementUI+vue+nodejs培训学校课程预约网站的设计与开发
  • ULAM公链第九十六期工作总结
  • 学习记录---kubernetes中备份和恢复etcd
  • MacOS M芯片 安装MySQL5.7教程
  • C#应用:MQTT分析——CONNECT为例子
  • 《opencv实用探索·六》简单理解图像膨胀
  • LeetCode力扣每日一题(Java):20、有效的括号