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中$this-&amp;gt;含义分析
Nov 29 PHP
php强制下载类型的实现代码
Apr 21 PHP
基于PHP 面向对象之成员方法详解
May 04 PHP
PHP Session 变量的使用方法详解与实例代码
Sep 11 PHP
PHP5中实现多态的两种方法实例分享
Apr 21 PHP
PHP aes (ecb)解密后乱码问题
Jun 22 PHP
php实现简单的MVC框架实例
Sep 23 PHP
PHP中大括号'{}'用法实例总结
Feb 08 PHP
利用PHP实现一个简单的用户登记表示例
Apr 25 PHP
Ajax中的JSON格式与php传输过程全面解析
Nov 14 PHP
PHP反射学习入门示例
Jun 14 PHP
PHP实现简易图形计算器
Aug 28 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
CentOS 安装 PHP5.5+Redis+XDebug+Nginx+MySQL全纪录
2015/03/25 PHP
Firefox下提示illegal character并出现乱码的原因
2010/03/25 Javascript
jQuery 获取对象 根据属性、内容匹配, 还有表单元素匹配
2010/05/31 Javascript
jquery提升性能最佳实践小结
2010/12/06 Javascript
JQuery页面的表格数据的增加与分页的实现
2013/12/10 Javascript
Jquery 在页面加载后执行的几种方式
2014/03/14 Javascript
javascript和jquery实现设置和移除文本框默认值效果代码
2015/01/13 Javascript
基于jquery实现轮播特效
2016/04/22 Javascript
jQuery插件FusionCharts实现的MSBar3D图效果示例【附demo源码】
2017/03/23 jQuery
Angularjs上传图片实例详解
2017/08/06 Javascript
Node.js引入UIBootstrap的方法示例
2018/05/11 Javascript
解决angular2在双向数据绑定时[(ngModel)]无法使用的问题
2018/09/13 Javascript
Vue项目中最新用到的一些实用小技巧
2018/11/06 Javascript
学习node.js 断言的使用详解
2019/03/18 Javascript
JS实现压缩上传图片base64长度功能
2019/12/03 Javascript
Antd下拉选择,自动匹配功能的实现
2020/10/24 Javascript
在linux系统下安装python librtmp包的实现方法
2019/07/22 Python
Python关于__name__属性的含义和作用详解
2020/02/19 Python
pymysql 插入数据 转义处理方式
2020/03/02 Python
Python爬虫抓取论坛关键字过程解析
2020/10/19 Python
为有想象力的人提供的生活方式商店:Firebox
2018/06/04 全球购物
印度在线杂货店:bigbasket
2018/08/23 全球购物
学生拾金不昧表扬信
2014/01/21 职场文书
会计顶岗实习心得
2014/01/25 职场文书
幼儿教育感言
2014/02/05 职场文书
出国留学计划书
2014/04/27 职场文书
志愿者宣传口号
2014/06/17 职场文书
纪念九一八事变演讲稿:青少年应树立远大理想
2014/09/14 职场文书
2015年党员创先争优承诺书
2015/01/22 职场文书
三下乡个人总结
2015/03/04 职场文书
房地产公司工程部经理岗位职责
2015/04/09 职场文书
领导干部失职检讨书
2015/05/05 职场文书
教学质量月活动总结
2015/05/11 职场文书
红与黑读书笔记
2015/06/29 职场文书
商业计划书范文
2019/04/24 职场文书
原生JS实现飞机大战小游戏
2021/06/09 Javascript