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 相关文章推荐
第七节--类的静态成员
Nov 16 PHP
模拟flock实现文件锁定
Feb 14 PHP
php for 循环语句使用方法详细说明
May 09 PHP
PHP实现模仿socket请求返回页面的方法
Nov 04 PHP
PHP实现的memcache环形队列类实例
Jul 28 PHP
微信支付开发动态链接Native支付
Jul 12 PHP
什么是PHP文件?如何打开PHP文件?
Jun 27 PHP
PHP使用栈解决约瑟夫环问题算法示例
Aug 27 PHP
PHP实现分布式memcache设置web集群session同步的方法
Apr 10 PHP
PHP设计模式之模板模式定义与用法详解
Dec 20 PHP
Laravel项目中timeAgo字段语言转换的改善方法示例
Sep 16 PHP
php获取微信openid方法总结
Oct 10 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中header的用法详解
2013/06/07 PHP
探讨PHP删除文件夹的三种方法
2013/06/09 PHP
PHP的MVC模式实现原理分析(一相简单的MVC框架范例)
2014/04/29 PHP
javascript 词法作用域和闭包分析说明
2010/08/12 Javascript
非常漂亮的JS+CSS图片幻灯切换特效
2013/11/20 Javascript
js完美的div拖拽实例代码
2014/01/22 Javascript
JS中call/apply、arguments、undefined/null方法详解
2016/02/15 Javascript
jquery模拟多级复选框效果的简单实例
2016/06/08 Javascript
Bootstrap中点击按钮后变灰并显示加载中实例代码
2016/09/23 Javascript
webpack+vue.js实现组件化详解
2016/10/12 Javascript
JavaScript数组去重的几种方法效率测试
2016/10/23 Javascript
VueJS全面解析
2016/11/10 Javascript
深入理解JavaScript中的预解析
2017/01/04 Javascript
vue 计时器组件的实现代码
2017/09/14 Javascript
微信小程序开发之自定义tabBar的实现
2018/09/06 Javascript
详解webpack 热更新优化
2018/09/13 Javascript
微信小程序局部刷新触发整页刷新效果的实现代码
2018/11/21 Javascript
微信小程序的开发范式BeautyWe.js入门详解
2019/07/10 Javascript
Vue简单实现原理详解
2020/05/07 Javascript
浅谈python多线程和队列管理shell程序
2015/08/04 Python
Python基于pygame实现的font游戏字体(附源码)
2015/11/11 Python
python 获取文件下所有文件或目录os.walk()的实例
2018/04/23 Python
pytorch实现MNIST手写体识别
2020/02/14 Python
python实现银行实战系统
2020/02/26 Python
Python通过kerberos安全认证操作kafka方式
2020/06/06 Python
Window10上Tensorflow的安装(CPU和GPU版本)
2020/12/15 Python
CSS3 3D制作实战案例分析
2016/09/18 HTML / CSS
导出HTML5 Canvas图片并上传服务器功能
2019/08/16 HTML / CSS
美国户外服装和装备购物网站:Outland USA
2020/03/22 全球购物
信息技术专业大学生个人的自我评价
2013/10/05 职场文书
小区停车场管理制度
2014/01/27 职场文书
环保宣传标语
2014/06/12 职场文书
小学竞选班长演讲稿
2014/09/09 职场文书
公司合作协议范文
2014/10/01 职场文书
求职简历自荐信怎么写
2015/03/26 职场文书
2016高中社会实践心得体会范文
2016/01/14 职场文书