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环境搭建最新方法
Sep 05 PHP
php实现rc4加密算法代码
Apr 25 PHP
smarty模板引擎中变量及变量修饰器用法实例
Jan 22 PHP
php使用APC实现实时上传进度条功能
Oct 26 PHP
php socket通信(tcp/udp)实例分析
Feb 14 PHP
JSON字符串传到后台PHP处理问题的解决方法
Jun 05 PHP
注释PHP和html混合代码的小技巧(分享)
Nov 03 PHP
php的PDO事务处理机制实例分析
Feb 16 PHP
PHP回调函数概念与用法实例分析
Nov 03 PHP
Laravel find in set排序实例
Oct 09 PHP
PHP日期和时间函数的使用示例详解
Aug 06 PHP
2020最新版 PhpStudy V8.1版本下载安装使用详解
Oct 30 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游戏编程25个脚本代码
2011/02/08 PHP
phpstudy的php版本自由修改的方法
2017/10/18 PHP
Laravel使用swoole实现websocket主动消息推送的方法介绍
2019/10/20 PHP
WordPress 插件——CoolCode使用方法与下载
2007/07/02 Javascript
Prototype RegExp对象 学习
2009/07/19 Javascript
jquery 插件学习(三)
2012/08/06 Javascript
JS定时器实例
2013/04/17 Javascript
用Javascript来生成ftp脚本的小例子
2013/07/03 Javascript
jquery对table中各数据的增加、保存、删除操作示例
2014/05/14 Javascript
JavaScript实现获得所有兄弟节点的方法
2015/07/23 Javascript
基于jquery实现人物头像跟随鼠标转动
2015/08/23 Javascript
基于jQuery实现多层次的手风琴效果附源码
2015/09/21 Javascript
原生js实现对Ajax的封装(仿jquery)
2017/01/22 Javascript
jQuery查找dom的几种方法效率详解
2017/05/17 jQuery
纯JS实现的读取excel文件内容功能示例【支持所有浏览器】
2018/06/23 Javascript
ES10的13个新特性示例(小结)
2019/09/23 Javascript
深入探索VueJS Scoped CSS 实现原理
2019/09/23 Javascript
layui 弹出层值回传解决方式
2019/11/14 Javascript
浅谈Node新版本13.2.0正式支持ES Modules特性
2019/11/25 Javascript
[02:27]2018DOTA2亚洲邀请赛赛前采访-OpTic
2018/04/03 DOTA
python实现在控制台输入密码不显示的方法
2015/07/02 Python
对Python强大的可变参数传递机制详解
2019/06/13 Python
如何通过Python实现标签云算法
2019/07/02 Python
如何利用python给图片添加半透明水印
2019/09/06 Python
python微信公众号开发简单流程实现
2020/03/09 Python
使用Pytorch搭建模型的步骤
2020/11/16 Python
澳大利亚婴儿、幼儿和儿童在线设计师商店:Smooch Baby
2019/02/16 全球购物
电大学习个人自我评价范文
2013/10/04 职场文书
会计毕业自我鉴定
2014/02/05 职场文书
竞争上岗实施方案
2014/03/21 职场文书
2014年清明节网上祭英烈寄语
2014/04/09 职场文书
安全生产演讲稿
2014/05/09 职场文书
个人汇报材料范文
2014/12/30 职场文书
廉洁自律个人总结
2015/02/14 职场文书
2015年酒店服务员工作总结
2015/05/18 职场文书
担保书怎么写 ?
2019/04/22 职场文书