ThinkPHP5框架中使用JWT的方法示例


Posted in PHP onJune 03, 2020

本文实例讲述了ThinkPHP5框架中使用JWT的方法。分享给大家供大家参考,具体如下:

JWT下载地址:https://jwt.io

可以直接去github上下载,也可以使用composer

使用composer的话要确保你的电脑上安装了composer,进入项目根目录下载即了,自动会放在vendor目录下

创建文件

我是放在common目录下

ThinkPHP5框架中使用JWT的方法示例

使用教程

github都有的

贴源码

JWTAuth.php

<?php
namespace app\common\Auth;
use \Lcobucci\JWT\Builder;
use \Lcobucci\JWT\Signer\Hmac\Sha256;
use \Lcobucci\JWT\Parser;
use \Lcobucci\JWT\ValidationData;
/**
 * 单例模式
 */
class JWTAuth
{
    private static $instance;
    /**
     * JWT TOKEN
     * @var [type]
     */
    private $token;
    /**
     * 颁发
     * @var string
     */
    private $iss = 'api.test.com';
    /**
     * 接收
     * @var string
     */
    private $aud = 'app.com';
 
    private $uid;
 
    private $secrect="#$%#$%*&^(*(*(";
 
    private $decodeToken;
 
    public static function getInstance() {
        if(is_null(self::$instance)) {
            self::$instance = new self();
        }
        return self::$instance;
    }
 
    private function __contruct(){
 
    }
 
    private function __clone(){
 
    }
 
    public function encode(){
        $time = time();
        $this->token = (new builder())->setHeader('alg','HS256')
            ->setIssuer($this->iss)
            ->setAudience($this->aud)
            ->setIssuedAt($time) //生效时间
            ->setExpiration($time + 20)//过期时间
            ->set('uid',$this->uid)
            ->sign(new Sha256(), $this->secrect)//加密算法
            ->getToken();
 
            return $this;
    }
 
    public function getToken(){
        return (string)$this->token;
    }
 
    public function setToken($token){
        $this->token = $token;
        return $this;
    }
    /**
     * 用户信息uid
     * @param [type] $uid [description]
     */
    public function setUid($uid){
        $this->uid = $uid;
        return $this;
    }
 
    public function jsonDecode(){
 
        $token = $this->token;
        $this->decodeToken = (new Parser())->parse((string) $token); 
 
        // echo $this->decodeToken->getClaim('uid');
        return $this->decodeToken;
    }
    /**
     * 验证令牌是否有效
     * @return [type] [description]
     */
    public function validate(){
 
        $data = new ValidationData();
        $data->setIssuer($this->iss);
        $data->setAudience($this->aud);
        return $this->jsonDecode()->validate($data);
 
    }
    /**
     * 签名来验证令牌在生成后是否未被修改
     * @return [type] [description]
     */
    public function verify(){
        $result = $this->jsonDecode()->verify(new Sha256(), $this->secrect);
        return $result;
    }
 
}

user.php 用来测试

<?php
namespace app\index\controller;
use app\common\Auth\JWTAuth;
 
class User{
 
    public function login(){
        
        $jwtAuth = JWTAuth::getInstance();
        $token = $jwtAuth->setUid(1)->encode()->getToken();
        echo $token;
        // var_dump(success_json_data(['token'=>$token]));
    }
 
    public function check_login(){
        $jwtAuth = JWTAuth::getInstance();
        $jwtAuth->setToken('eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJhcGkudGVzdC5jb20iLCJhdWQiOiJhcHAuY29tIiwiaWF0IjoxNTU2MDk1MDI5LCJleHAiOjE1NTYwOTUwNDksInVpZCI6MX0.oi4rLbQFNZUJsW4fVHWiOQxfEmomuvldAV-gFKl2V74');
 
        if($jwtAuth->validate() && $jwtAuth->verify()){
            echo '验证成功';
        }else{
            echo '登录过期';
        }
 
    }
}

最后

jwt本身的话是不带token刷新方法,所以一旦token过期,客户端就要重新登录。

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

PHP 相关文章推荐
PHP COOKIE设置为浏览器进程
Jun 21 PHP
php下安装配置fckeditor编辑器的方法
Mar 02 PHP
五款常用mysql slow log分析工具的比较分析
May 22 PHP
PHP 基于Yii框架中使用smarty模板的方法详解
Jun 13 PHP
主流PHP框架的优缺点对比分析
Dec 25 PHP
php版微信公众号接口实现发红包的方法
Oct 14 PHP
CI框架无限级分类+递归的实现代码
Nov 01 PHP
php中strlen和mb_strlen用法实例分析
Nov 12 PHP
老生常谈PHP位运算的用途
Mar 12 PHP
详解php实现页面静态化原理
Jun 21 PHP
Laravel框架Request、Response及Session操作示例
May 06 PHP
PHP实现微信提现(企业付款到零钱)
Aug 01 PHP
Thinkphp5框架异常处理操作实例分析
Jun 03 #PHP
Thinkphp5框架中引入Markdown编辑器操作示例
Jun 03 #PHP
PHP数组基本用法与知识点总结
Jun 02 #PHP
PHP函数用法详解【初始化、嵌套、内置函数等】
Jun 02 #PHP
PHP与Web页面交互操作实例分析
Jun 02 #PHP
PHP Web表单生成器案例分析
Jun 02 #PHP
一文看懂PHP进程管理器php-fpm
Jun 01 #PHP
You might like
《魔兽世界》惊魂幻象将获得调整
2020/03/08 其他游戏
谈谈PHP语法(4)
2006/10/09 PHP
PHP比你想象的好得多
2014/11/27 PHP
php中__toString()方法用法示例
2016/12/07 PHP
利用Homestead快速运行一个Laravel项目的方法详解
2017/11/14 PHP
php 中phar包的使用教程详解
2018/10/26 PHP
BOOM vs RR BO5 第一场 2.14
2021/03/10 DOTA
使用prototype.js进行异步操作
2007/02/07 Javascript
对YUI扩展的Gird组件 Part-2
2007/03/10 Javascript
jQuery 数据缓存data(name, value)详解及实现
2010/01/04 Javascript
经典海量jQuery插件 大家可以收藏一下
2010/02/07 Javascript
jquery动态添加删除div 具体实现
2013/07/20 Javascript
jQuery实现下拉框左右选择的简单实例
2014/02/22 Javascript
JavaScript实现表格快速变色效果代码
2015/08/19 Javascript
AngularJS基础 ng-mousemove 指令简单示例
2016/08/02 Javascript
javascript实现滑动解锁功能
2017/03/22 Javascript
详解nodejs模板引擎制作
2017/06/14 NodeJs
关于JS与jQuery中的文档加载问题
2017/08/22 jQuery
vue 标签属性数据绑定和拼接的实现方法
2018/05/17 Javascript
vue.js中使用echarts实现数据动态刷新功能
2019/04/16 Javascript
微信小程序实现单个卡片左滑显示按钮并防止上下滑动干扰功能
2019/12/06 Javascript
Ant Design的Table组件去除
2020/10/24 Javascript
Python字符串格式化
2015/06/15 Python
Win7下搭建python开发环境图文教程(安装Python、pip、解释器)
2016/05/17 Python
利用Python获取操作系统信息实例
2016/09/02 Python
Python在后台自动解压各种压缩文件的实现方法
2020/11/10 Python
Django项目在pycharm新建的步骤方法
2021/03/02 Python
公司JAVA开发面试题
2015/04/02 面试题
2014年政风行风评议工作总结
2014/10/21 职场文书
2015年社区综治工作总结
2015/04/21 职场文书
第一军规观后感
2015/06/12 职场文书
2015年小学实验室工作总结
2015/07/28 职场文书
车辆管理制度范本
2015/08/05 职场文书
MySQL系列之十二 备份与恢复
2021/07/02 MySQL
Java实现给Word文件添加文字水印
2022/02/15 Java/Android
Python Pandas解析读写 CSV 文件
2022/04/11 Python