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 相关文章推荐
服务器web工具 php环境下
Dec 29 PHP
php数组函数序列之each() - 获取数组当前内部指针所指向元素的键名和键值,并将指针移到下一位
Oct 31 PHP
深入解析yii权限分级式访问控制的实现(非RBAC法)
Jun 13 PHP
PHP中鲜为人知的10个函数
Feb 28 PHP
php生成随机数的三种方法
Sep 10 PHP
Laravel 5框架学习之表单
Apr 08 PHP
php中get_defined_constants函数用法实例分析
May 12 PHP
PHP数组实例详解
Jun 26 PHP
PHP实现简单的模板引擎功能示例
Sep 02 PHP
CentOS7.0下安装PHP5.6.30服务的教程详解
Sep 29 PHP
Smarty模板变量与调节器实例详解
Jul 20 PHP
如何在Laravel5.8中正确地应用Repository设计模式
Nov 26 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中看实例学正则表达式
2006/12/25 PHP
菜鸟学PHP之Smarty入门
2007/01/04 PHP
php桌面中心(四) 数据显示
2007/03/11 PHP
Smarty使用自定义资源的方法
2015/08/08 PHP
PHP实现生成模糊图片的方法示例
2017/12/21 PHP
Javascript操纵Cookie实现购物车程序
2006/11/23 Javascript
JS 学习笔记 防止发生命名冲突
2009/07/30 Javascript
利用javascript解决图片缩放及其优化的代码
2012/05/23 Javascript
JS中获取函数调用链所有参数的方法
2015/05/07 Javascript
微信小程序 生命周期和页面的生命周期详细介绍
2017/01/19 Javascript
Node.js实现文件上传的示例
2017/06/28 Javascript
Three.js实现浏览器变动时进行自适应的方法
2017/09/26 Javascript
基于es6三点运算符的使用方法(实例讲解)
2017/10/12 Javascript
ajax请求+vue.js渲染+页面加载的示例
2018/02/11 Javascript
关闭Vue计算属性自带的缓存功能方法
2018/03/02 Javascript
Vue验证码60秒倒计时功能简单实例代码
2018/06/22 Javascript
React 项目迁移 Webpack Babel7的实现
2018/09/12 Javascript
vue 双向数据绑定的实现学习之监听器的实现方法
2018/11/30 Javascript
jQuery事件多次绑定与解绑问题实例分析
2019/02/19 jQuery
JQuery中的常用事件、对象属性与使用方法分析
2019/12/23 jQuery
[41:54]2018DOTA2亚洲邀请赛 4.1 小组赛A组加赛 TNC vs Liquid
2018/04/03 DOTA
Python发送Email方法实例
2014/08/21 Python
跟老齐学Python之赋值,简单也不简单
2014/09/24 Python
Python实现在线音乐播放器
2017/03/03 Python
python numpy 显示图像阵列的实例
2018/07/02 Python
Flask之flask-session的具体使用
2018/07/26 Python
基于python调用jenkins-cli实现快速发布
2020/08/14 Python
韩国知名的家庭购物网站:CJmall
2016/08/01 全球购物
Pat McGrath Labs官网:世界上最有影响力的化妆师推出的彩妆品牌
2018/01/07 全球购物
大学生个人总结的自我评价
2013/10/05 职场文书
捐款倡议书格式范文
2014/05/14 职场文书
大学生安全责任书
2014/07/25 职场文书
践行三严三实心得体会
2014/10/13 职场文书
教师辞职书范文
2015/02/26 职场文书
单位考核鉴定意见
2015/06/05 职场文书
我对PyTorch dataloader里的shuffle=True的理解
2021/05/20 Python