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 $_SERVER详解
Jan 16 PHP
PHP has encountered an Access Violation at 7C94BD02解决方法
Aug 24 PHP
php cout&amp;lt;&amp;lt;的一点看法
Jan 24 PHP
PHP实现多进程并行操作的详解(可做守护进程)
Jun 18 PHP
PHP采用get获取url汉字出现乱码的解决方法
Nov 13 PHP
php基于GD库画五星红旗的方法
Feb 24 PHP
详解php比较操作符的安全问题
Dec 03 PHP
PHP二进制与字符串之间的相互转换教程
Oct 14 PHP
PHP实现防盗链的方法分析
Jul 25 PHP
laravel Validator ajax返回错误信息的方法
Sep 29 PHP
php png失真的原因及解决办法
Oct 24 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脚本的10个技巧(5)
2006/10/09 PHP
解析PHP中empty is_null和isset的测试
2013/06/29 PHP
PHP按行读取文件时删除换行符的3种方法
2014/05/04 PHP
php技巧小结【推荐】
2017/01/19 PHP
PHP笛卡尔积实现原理及代码实例
2020/12/09 PHP
JavaScript 动态改变图片大小
2009/06/11 Javascript
IE6中使用position导致页面变形的解决方案(js代码)
2011/01/09 Javascript
IE6、IE7中setAttribute不支持class/for/rowspan/colspan等属性
2011/08/28 Javascript
深入剖析JavaScript中的枚举功能
2014/03/06 Javascript
localResizeIMG先压缩后使用ajax无刷新上传(移动端)
2015/08/11 Javascript
jQuery弹出下拉列表插件(实现kindeditor的@功能)
2016/08/16 Javascript
angular中实现控制器之间传递参数的方式
2017/04/24 Javascript
详解Angular 4.x NgIf 的用法
2017/05/22 Javascript
对angularjs框架下controller间的传值方法详解
2018/10/08 Javascript
JS高阶函数原理与用法实例分析
2019/01/15 Javascript
今天,小程序正式支持 SVG
2019/04/20 Javascript
通过原生vue添加滚动加载更多功能
2019/11/21 Javascript
js在HTML的三种引用方式详解
2020/08/29 Javascript
OpenLayer3自定义测量控件MeasureTool
2020/09/28 Javascript
[07:48]DOTA2上海特级锦标赛主赛事首日RECAP
2016/03/04 DOTA
Python实现向QQ群成员自动发邮件的方法
2014/11/19 Python
python如何重载模块实例解析
2018/01/25 Python
python的staticmethod与classmethod实现实例代码
2018/02/11 Python
Python堆排序原理与实现方法详解
2018/05/11 Python
Numpy 改变数组维度的几种方法小结
2018/08/02 Python
django 环境变量配置过程详解
2019/08/06 Python
python ctypes库2_指定参数类型和返回类型详解
2019/11/19 Python
python GUI库图形界面开发之PyQt5下拉列表框控件QComboBox详细使用方法与实例
2020/02/27 Python
基于logstash实现日志文件同步elasticsearch
2020/08/06 Python
大学生实习感言
2014/01/16 职场文书
校园十大歌手策划书
2014/02/01 职场文书
毕业自我鉴定怎么写
2014/03/25 职场文书
我的中国心演讲稿
2014/09/04 职场文书
学生吸烟检讨书
2014/09/14 职场文书
岁月神偷观后感
2015/06/11 职场文书
党务工作者主要事迹材料
2015/11/03 职场文书