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 相关文章推荐
建立文件交换功能的脚本(三)
Oct 09 PHP
PHP4在Windows2000下的安装
Oct 09 PHP
请php正则走开
Mar 15 PHP
编写漂亮的代码 - 将后台程序与前端程序分开
Apr 23 PHP
DISCUZ 论坛管理员密码忘记的解决方法
May 14 PHP
zf框架的registry(注册表)使用示例
Mar 13 PHP
PHP中ini_set与ini_get用法实例
Nov 04 PHP
网站被恶意镜像怎么办 php一段代码轻松搞定(全面版)
Oct 23 PHP
php实现的数组转xml案例分析
Sep 28 PHP
php 多继承的几种常见实现方法示例
Nov 18 PHP
详解no input file specified 三种解决方法
Nov 29 PHP
VSCode+PHPstudy配置PHP开发环境的步骤详解
Aug 20 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
php学习笔记 面向对象的构造与析构方法
2011/06/13 PHP
浅析php变量作用域的一些问题
2013/08/08 PHP
PHP统计二维数组元素个数的方法
2013/11/12 PHP
浅谈PHP中的错误处理和异常处理
2017/02/04 PHP
PHP中in_array的隐式转换的解决方法
2018/03/06 PHP
一份老外写的XMLHttpRequest代码多浏览器支持兼容性
2007/01/11 Javascript
jQuery使用手册之二 DOM操作
2007/03/24 Javascript
jQuery的实现原理的模拟代码 -3 事件处理
2010/08/03 Javascript
javascript 触发HTML元素绑定的函数
2010/09/11 Javascript
javascript编写贪吃蛇游戏
2015/07/07 Javascript
js实现拖拽效果(构造函数)
2015/12/14 Javascript
使用JavaScript实现弹出层效果的简单实例
2016/05/31 Javascript
javascript垃圾收集机制的原理分析
2016/12/08 Javascript
深入理解JS继承和原型链的问题
2016/12/17 Javascript
Vue写一个简单的倒计时按钮功能
2018/04/20 Javascript
基于vue-upload-component封装一个图片上传组件的示例
2018/10/16 Javascript
Vue.js页面中有多个input搜索框如何实现防抖操作
2019/11/04 Javascript
js实现双色球效果
2020/08/02 Javascript
[02:08]2014DOTA2国际邀请赛 430专访:力争取得小组前二
2014/07/11 DOTA
[10:21]2018DOTA2国际邀请赛寻真——Winstrike
2018/08/11 DOTA
使用Python的Supervisor进行进程监控以及自动启动
2014/05/29 Python
Python读取视频的两种方法(imageio和cv2)
2018/04/15 Python
python实现AES加密与解密
2019/03/28 Python
python实现的发邮件功能示例
2019/09/11 Python
python绘制BA无标度网络示例代码
2019/11/21 Python
家用个人磨皮机:Trophy Skin
2017/03/30 全球购物
Andrew Marc官网:设计师外套的领先制造商
2019/10/30 全球购物
大学毕业登记表自我鉴定
2013/10/09 职场文书
药学专业毕业生求职信
2013/10/20 职场文书
活动策划邀请函
2014/02/06 职场文书
优秀学生干部先进事迹材料
2014/05/26 职场文书
党支部特色活动方案
2014/08/20 职场文书
HTML基础-标签分类(闭合标签,空标签,块级元素,行内元素,行级块元素,可替换元素)
2021/03/31 HTML / CSS
vue Element-ui表格实现树形结构表格
2021/06/07 Vue.js
简单谈谈Python面向对象的相关知识
2021/06/28 Python
「魔导具师妲莉亚永不妥协~从今天开始的自由职人生活~」1、2卷发售宣传CM公开
2022/03/21 日漫