学习php中使用composer下载安装firebase/php-jwt 以及调用方法

18 篇文章 0 订阅

学习php中使用composer下载安装firebase/php-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我直接写上去了 ,只为演示用,项目里是从客户端获取的来比对

  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值