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 Ajax实现页面无刷新发表评论
Jan 02 PHP
php 网页播放器用来播放在线视频的代码(自动判断并选择视频文件类型)
Jun 03 PHP
Wordpress 相册插件 NextGEN-Gallery 添加目录将中文转为拼音的解决办法
Dec 29 PHP
PHP在字符断点处截断文字的实现代码
Apr 21 PHP
教你如何使用php session
Oct 28 PHP
php函数重载的替代方法--伪重载详解
May 08 PHP
PHP代码判断设备是手机还是平板电脑(两种方法)
Oct 19 PHP
EarthLiveSharp中cloudinary的CDN图片缓存自动清理python脚本
Apr 04 PHP
浅谈Yii乐观锁的使用及原理
Jul 25 PHP
PHP+MySQL实现消息队列的方法分析
May 09 PHP
PHP实现的服务器一致性hash分布算法示例
Aug 09 PHP
laravel框架上传图片实现实时预览功能
Oct 14 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创建基本身份认证站点的方法详解
2013/06/08 PHP
php二分查找二种实现示例
2014/03/12 PHP
基于thinkPHP3.2实现微信接入及查询token值的方法
2017/04/18 PHP
JavaScript触发器详解
2007/03/10 Javascript
js判断当前浏览器类型,判断IE浏览器方法
2014/06/02 Javascript
js创建对象的方式总结
2015/01/10 Javascript
原生js实现类似弹窗抖动效果
2015/04/02 Javascript
vue.js入门教程之计算属性
2016/09/01 Javascript
浅谈js中的引用和复制(传值和传址)
2016/09/18 Javascript
解决Vue编译时写在style中的路径问题
2017/09/21 Javascript
浅谈es6语法 (Proxy和Reflect的对比)
2017/10/24 Javascript
vue的路由映射问题及解决方案
2019/10/14 Javascript
谈谈JavaScript中的函数
2020/09/08 Javascript
Vue获取微博授权URL代码实例
2020/11/04 Javascript
[09:47]2018DOTA2亚洲邀请赛4.5SOLO赛 No[o]ne vs Sumail
2018/04/06 DOTA
python+requests+unittest API接口测试实例(详解)
2017/06/10 Python
深入分析python数据挖掘 Json结构分析
2018/04/21 Python
python替换字符串中的子串图文步骤
2019/06/19 Python
python 计算平均平方误差(MSE)的实例
2019/06/29 Python
django 2.2和mysql使用的常见问题
2019/07/18 Python
Python实现快速排序的方法详解
2019/10/25 Python
使用python-pptx包批量修改ppt格式的实现
2020/02/14 Python
Python实现名片管理系统
2020/02/14 Python
虚拟机下载python是否需要联网
2020/07/27 Python
python“静态”变量、实例变量与本地变量的声明示例
2020/11/13 Python
python中字符串的编码与解码详析
2020/12/03 Python
Python Pygame实现俄罗斯方块
2021/02/19 Python
美国鲍勃商店:Bob’s Stores
2018/07/22 全球购物
英国健身专家:WIT Fitness
2021/02/09 全球购物
在C语言中实现抽象数据类型什么方法最好
2014/06/26 面试题
系统管理员的职责包括那些?管理的对象是什么?
2013/01/18 面试题
《永远的白衣战士》教学反思
2014/04/25 职场文书
小学师德师风演讲稿
2014/09/02 职场文书
观看建国大业观后感
2015/06/01 职场文书
《卖火柴的小女孩》教学反思
2016/02/19 职场文书
详解php中流行的rpc框架
2021/05/29 PHP