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
用php实现像JSP,ASP里Application那样的全局变量
Jan 12 PHP
php MySQL与分页效率
Jun 04 PHP
php做下载文件的实现代码及文件名中乱码解决方法
Feb 03 PHP
一个PHP的ZIP压缩类分享
May 04 PHP
php开启openssl的方法
May 15 PHP
php解析json数据实例
Aug 19 PHP
php之curl实现http与https请求的方法
Oct 21 PHP
php中stdClass的用法分析
Feb 27 PHP
PHP目录操作实例总结
Sep 27 PHP
php版本CKEditor 4和CKFinder安装及配置方法图文教程
Jun 05 PHP
laravel框架添加数据,显示数据,返回成功值的方法
Oct 11 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
亚洲咖啡有什么?亚洲咖啡产地介绍 亚洲咖啡有什么特点?
2021/03/05 新手入门
在Windows中安装Apache2和PHP4的权威指南
2006/10/09 PHP
一个php作的文本留言本的例子(六)
2006/10/09 PHP
什么是PHP文件?如何打开PHP文件?
2017/06/27 PHP
PHP堆栈调试操作简单示例
2018/06/15 PHP
PHP htmlspecialchars()函数用法与实例讲解
2019/03/08 PHP
Ext.FormPanel 提交和 Ext.Ajax.request 异步提交函数的区别
2009/11/12 Javascript
jquery简单实现鼠标经过导航条改变背景图
2013/12/17 Javascript
Javascript前端UI框架Kit使用指南之Kitjs简介
2014/11/28 Javascript
JavaScript实现的简单烟花特效代码
2015/10/20 Javascript
基于jQuery实现仿51job城市选择功能实例代码
2016/03/02 Javascript
详解照片瀑布流效果(js,jquery分别实现与知识点总结)
2017/01/01 Javascript
jQuery图片拖动组件Dropzone用法示例
2017/01/17 Javascript
深入理解nodejs中Express的中间件
2017/05/19 NodeJs
Vue2 SSR渲染根据不同页面修改 meta
2017/11/20 Javascript
解决vue2.0动态绑定图片src属性值初始化时报错的问题
2018/03/14 Javascript
JQuery属性操作与循环用法示例
2019/05/15 jQuery
通过javascript实现段落的收缩与展开
2019/06/26 Javascript
[02:05]2014DOTA2西雅图邀请赛 专访啸天mik夫妻档
2014/07/08 DOTA
[52:07]完美世界DOTA2联赛PWL S3 LBZS vs access 第二场 12.10
2020/12/13 DOTA
urllib2自定义opener详解
2014/02/07 Python
Python实现字典按照value进行排序的方法分析
2017/12/23 Python
Python序列循环移位的3种方法推荐
2018/04/09 Python
Python实现的微信好友数据分析功能示例
2018/06/21 Python
Numpy 改变数组维度的几种方法小结
2018/08/02 Python
基于Python3.6+splinter实现自动抢火车票
2018/09/25 Python
Python读取excel指定列生成指定sql脚本的方法
2018/11/28 Python
使用Python进行体育竞技分析(预测球队成绩)
2019/05/16 Python
菲律宾优惠券网站:MetroDeal
2019/04/12 全球购物
三项教育活动实施方案
2014/03/30 职场文书
2014乡党委副书记党建工作汇报材料
2014/11/02 职场文书
观看焦裕禄观后感
2015/06/09 职场文书
KTV员工管理制度
2015/08/06 职场文书
教你怎么用python实现字符串转日期
2021/05/24 Python
Win11控制面板快捷键是什么?Win11打开控制面板的方法汇总
2022/07/07 数码科技
JS前端使用canvas实现扩展物体类和事件派发
2022/08/05 Javascript