thinkphp6集成JWT

ThinkPHP6使用JWT+中间件实现Token验证 thinkphp6中使用JWT生成、验证Token的保姆级教程,理论+实战,跟着步骤来,轻松学会使用JWT~ 阅读详情

1.引入php-jwt包

使用composer安装 JWT 功能组件

# 安装
composer require lcobucci/jwt 3.3

2.封装JWT工具类 (参考 GitHub - lcobucci/jwt at 3.3)

Route::group('goods',function (){
    Route::resource('blog','Login');
})->middleware(\app\admin\middleware\Login::class);

3.代码

建立(controller同级):extend/tools/jwt/Token.php

/**
 * Created by PhpStorm.
 * Author: Shadow
 * Date: 2021/12/19
 * Time: 5:35 下午
 * description: Token.php
 */

namespace app\adminapi\extend\tools\jwt;

use Lcobucci\JWT\Signer\Hmac\Sha256;
use Lcobucci\JWT\Builder;
use Lcobucci\JWT\Parser;
use Lcobucci\JWT\ValidationData;


class Token
{
    private static $_config = [
        'audience' => 'http://www.pyg.com',//接收人
        'id' => '3f2g57a92aa',//token的唯一标识,这里只是一个简单示例
        'sign' => 'pinyougou',//签名密钥
        'issuer' => 'http://adminapi.pyg.com',//签发人
        'expire' => 3600*24 //有效期
    ];

    //生成token
    public static function getToken($user_id){

        //签名对象
        $signer = new Sha256();
        //获取当前时间戳
        $time = time();
        //设置签发人、接收人、唯一标识、签发时间、立即生效、过期时间、用户id、签名
        $token = (new Builder())->issuedBy(self::$_config['issuer'])
            ->canOnlyBeUsedBy(self::$_config['audience'])
            ->identifiedBy(self::$_config['id'], true)
            ->issuedAt($time)
            ->canOnlyBeUsedAfter($time-1)
            ->expiresAt($time + self::$_config['expire'])
            ->with('user_id', $user_id)
            ->sign($signer, self::$_config['sign'])
            ->getToken();
        return (string)$token;
    }

    //从请求信息中获取token令牌
    public static function getRequestToken()
    {
        if (empty($_SERVER['HTTP_AUTHORIZATION'])) {
            return false;
        }

        $header = $_SERVER['HTTP_AUTHORIZATION'];
        $method = 'bearer';
        //去除token中可能存在的bearer标识
        return trim(str_ireplace($method, '', $header));
    }

    //从token中获取用户id (包含token的校验)
    public static function getUserId($token = null)
    {
        $user_id = null;

        $token = empty($token)?self::getRequestToken():$token;

        if (!empty($token)) {
            //为了注销token 加以下if判断代码
            $delete_token = cache('delete_token') ?: [];
            if(in_array($token, $delete_token)){
                //token已被删除(注销)
                return $user_id;
            }
            $token = (new Parser())->parse((string) $token);
            //验证token
            $data = new ValidationData();
            $data->setIssuer(self::$_config['issuer']);//验证的签发人
            $data->setAudience(self::$_config['audience']);//验证的接收人
            $data->setId(self::$_config['id']);//验证token标识

            if (!$token->validate($data)) {
                //token验证失败
                return $user_id;
            }

            //验证签名
            $signer = new Sha256();
            if (!$token->verify($signer, self::$_config['sign'])) {
                //签名验证失败
                return $user_id;
            }
            //从token中获取用户id
            $user_id = $token->getClaim('user_id');
        }

        return $user_id;
    }
}

 4.测试

静态调用封装的\tools\jwt\Token类的getToken方法,传递一个用户id值,生成token

静态调用封装的\tools\jwt\Token类的getUserId方法,传递一个token,获取用户id值

$data = [
       $token = Token::getToken($obj->id)
];

5.效果图

 鉴权登录

https://blog.youkuaiyun.com/code_nutter/article/details/122135970

 /**
     * 处理请求
     *
     * @param \think\Request $request
     * @param \Closure       $next
     * @return Response
     */
    public function handle($request, \Closure $next)
    {
        //获取Token
        $token = Token::getRequestToken();
        //判断token是否存在
        if (!$token){
            return fail('','请先登录');
        }
        //验证
        $user_id = Token::getUserId($token);
        if (!$user_id){
            return fail('','token失败');
        }
        return $next($request);
    }

还有一个简单的方法

连接在下

ThinkPHP6 集成JWT+接口频繁访问限制_code_nutter的博客-优快云博客

tp6 JWT token认证 public static function createjwt($userid=null) { //t的签发密钥,验证token的时候需要用到 $key = md5(env('TOKEN.key',"pyg")); //签发时间 $time = time(); //过期时间 $expire = $time + 14400; $token = array( "user_id" => $userid, //签发组织. 阅读详情

相关推荐

TP使用jwt(简单)

TP使用jwt(简单) 安装tp 安装jwt composer require lcobucci/jwt 3.3 接下来封装一个jwt 规则 最好加在 <?php namespace tools\jwt; use Lcobucci\JWT\Builder; use Lcobucci\JWT\Parser; use Lcobucci\JWT\Signer\Hmac\Sha256; use Lcobucci\JWT\ValidationData; /** * Created by PhpStor

m0_50593634的博客 1003

如何使用ThinkPHP6进行JWT认证?

我们首先安装和配置了JWT扩展,然后实现了JWT认证控制器和JWT认证中间件,最后在应用程序的路由中使用JWT认证中间件来保护需要认证的API接口。如果JWT令牌无效或者已过期,我们返回一个未授权的HTTP响应,否则我们继续后续请求处理,并将JWT令牌的信息存储在请求对象中,以供后续控制器使用。其中“key”是一个字符串,用于生成JWT令牌的签名密钥,“alg”是JWT签名算法的名称,我们可以选择“HS256”、“HS512”、“RS256”等算法,“exp”是JWT令牌的过期时间,按秒数计算。

wyh757787026的博客 1621

thinkphp6 集成JWT

thinkphp6 使用JWT生成token 进行验证

qq_62874327的博客 624

thinkphp6使用jwt完成token生成与校验

这样处理之后,就已经注册了全局中间件了,并且可以在自己建的中间件文件里获取请求方法了,再把全局中的中间件文件里面的注册去掉就可以了。如果在全局中间件文件里注册这个中间件的话(全局中间件文件:app\middleware.php),这样项目里的每一个方法都会走token判断,但是我们不需要登录方法判断token权限,这个时候我就在中间件文件里设置了一个请求方法白名单,凡是在白名单中的请求方法都不会判断token权限。下载完成后会在vendor\firebase下就能看到刚刚下载好的php-jwt了。

xy123boy的博客 1543

SAP License USMM SLAW2 SAP审计

引言 企业每年都会收到SAP License审计邮件,邮件内容大致就是根据贵公司与SAP签定的合同XXX条款规定,贵公司所安装的SAP系统需要进行测定。 关键字: SAP License、 SAP USMM、 SLAW2、 SAP 账号、SAP 账号审计、 SAP License 审计、 SAP 审计报告、SAP 账号优化 SAP License审计邮件 企业每年都会收到SAP License审计邮件,邮件内容大致就是根据贵公司与SAP签定的合同XXX条款规定,贵公司所安...

感悟人生 2981

亿佰特E77模块(STM32WLE5CCU6)LoRa通信实战指南:从配置到应用开发

本文详细介绍了亿佰特E77模块(STM32WLE5CCU6)的LoRa通信实战指南,从硬件配置到应用开发。基于ARM Cortex-M4内核的E77模块集成了LoRa射频前端,具备超低功耗和硬件级抗干扰特性,适用于智能农业、工业现场等场景。文章提供了开发环境搭建、LoRa参数配置、实战通信及性能优化等实用技巧,帮助开发者快速掌握LoRa通信技术。

weixin_29164185的博客 762

Thinkphp6入门以及集成jwt

官方文档:https://www.kancloud.cn/manual/thinkphp6_0/1037479 composer文档:https://www.kancloud.cn/thinkphp/composer 一.TP6下载安装 安装要求: php>7.1.0 6.0版本开始,必须通过Composer方式安装和更新,所以你无法通过Git下载安装。 安装composer 1.下载 composer.exe 2.安装注意选择系统环境变量以及php 通过composer获取tp6 然后在你选择的目录

dagjj的博客 1915

腾讯ACE反作弊系统:内核驱动与AI行为分析如何守护游戏公平

在游戏安全领域,反作弊技术是保障公平竞技环境的核心防线。其基本原理是通过监控系统关键行为,识别并阻断非法的第三方程序干预。从技术实现看,现代反作弊方案普遍采用分层防御架构,结合用户态模块进行应用层检测,并依赖内核态驱动实现底层深度监控,以此构建纵深防御体系。这种技术的核心价值在于,它能有效对抗从简单内存修改到高级驱动级作弊等多种威胁,维护游戏经济系统和玩家体验的完整性。随着作弊手段的演进,行为分析与AI赋能变得至关重要,系统通过机器学习模型分析进程行为序列的异常模式,即使面对未知特征的外挂变种也能进行有效识

weixin_33978578的博客 747

ThinkPHP6集成JWT方法JWT-AUTH

ThinkPHP6集成JWT方法JWT-AUTH

qq7027的博客 2522

Cadence SKILL 语言实战指南:从函数列表到高效自动化脚本

本文是Cadence SKILL语言实战指南,旨在帮助芯片设计工程师从掌握核心函数列表出发,高效构建自动化脚本。文章详细解析了数据处理、数据库访问、流程控制及错误处理四类关键函数,并通过版图层批量修改与参数化单元生成两大实战场景,演示如何将函数组合成解决实际问题的自动化方案,从而显著提升Virtuoso环境下的工作效率。

beta5的博客 706

Keras深度学习实战(32)——基于LSTM预测股价

股价预测是时间序列预测中最具挑战性的问题之一,研究股价预测问题具有重要的理论意义和应用价值。针对循环神经网络在股价预测中存在的长期依赖等缺点,本文引入了长短时记忆神经网络以提高股价预测的效果。同时,我们把有关公司的新闻标题的文本数据作为模型的输入变量时,发现预测效果更好,因此我们可以把有关公司的新闻标题的文本数据作为一个有效的输入变量。最后,通过利用 Keras 实现了以上两个股价预测模型,并进行了性能分析和对比。

盼小辉丶的博客 1万+

ThinkPHP6集成JWT方法生成及销毁

ThinkPHP6集成JWT方法生成及销毁

qq7027的博客 2306

01-诊断开发流程概述

传送门 ==>> AutoSAR入门和实战系列总目录。

1787

Thinkphp6集成JWT进行token认证

Thinkphp6集成JWT进行token认证

H2912616818的博客 804

数学之美:欣赏超越数e

文章目录一、e为何物?二、利息与e的关系1、利息问题2、计算利息3、欣赏螺旋线(1)螺旋线概述(2)绘制螺旋线三、e和π 一、e为何物? e是一个无限不循环小数,其值约等于2.718281828…,它是一个超越数,有时也称为欧拉数(Euler’s Number)。 以e为底的对数称为自然对数(Natural Logarithm),数学中使用自然这个词的还有自然数(Natural Number)。 这里的“自然”并不是现代人所习惯的“大自然”,而是有点儿“天然存在,非人为”的意思。 二、利息与e的关系

howard2005的专栏 1718

游戏大厂状态同步与帧同步技术全解析——让虚拟世界万物协同的“时间齿轮”

本文深入解析了大厂游戏开发中的两种核心同步技术:状态同步和帧同步。状态同步适合大型MMO和FPS游戏,由服务端计算并广播世界状态;帧同步则通过统一操作输入实现MOBA和RTS游戏的绝对公平。文章详细比较了两者的差异、适用场景和底层实现原理,并揭秘了《王者荣耀》《PUBG》等热门游戏的同步机制。同时探讨了本地预测、延迟补偿、防作弊等关键技术,以及未来AI和云游戏带来的同步新挑战,为开发者提供了全面的技术参考和实践指南。

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 923

ThinkPhp6集成JWT的方法

第一步: 引入 php-jwt 包 composer require firebase/php-jwt 第二步: 控制器文件代码:app\controller\JWT.php <?php namespace app\controller; use Firebase\JWT\ExpiredException; use Firebase\JWT\JWT as JWTUtil; use think\Exception; class JWT { /** * 根据json we

Xian_Hu的博客 566

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Thinkphp6+JWT集成

1.引入php-jwt包 composer require firebase/php-jwt 2.代码封装在lib文件中 <?php namespace app\lib; use Firebase\JWT\ExpiredException; use Firebase\JWT\JWT as JWTUtil; use think\Exception; use think\response\Json; class JWT { /** * 根据json web token设

w3135413的博客 195

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

ThinkPHP6集成JWT方法(生成、获取、验证)

1.引入php-jwt包 composer require firebase/php-jwt 2.代码 控制器文件:app\api\controller\Jwt.php <?php namespace app\business; use Firebase\JWT\ExpiredException; use Firebase\JWT\JWT as JWTUtil; class JWT { /** * 根据json web token设置的规则生成token * @re...

GongWillNotPHP的博客 739

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

ThinkPHP6 集成JWT+接口频繁访问限制

jwt安装 第一步: composer require thans/tp-jwt-auth 第二步: php think jwt:create 此举将生成jwt.php和.env配置文件。不推荐直接修改jwt.php 同时,env中会随机生成secret。请不要随意更新secret,也请保障secret安全。 使用方式 对于需要验证的路由或者模块添加中间件: thans\jwt\middleware\JWTAuth::class 示例: use thans\jwt\faca

code_nutter的博客 1402

PHP:firebase/php-jwt生成jwt和验证

安装 composer require firebase/php-jwt 文档:https://github.com/firebase/php-jwt <?php require __DIR__ . '/../vendor/autoload.php'; use Firebase\JWT\JWT; use Firebase\JWT\ExpiredException; $key = "example_key"; $time = time(); $data = [ 'id'=> 1,

彭世瑜的博客 4331

thinkphp6 使用 jwt 认证

thinkphp6 使用jwt 客户端使用用户名和密码请求登录 服务端收到请求,验证用户名和密码 验证成功后,服务端会签发一个token,再把这个token返回给客户端 客户端收到token后可以把它存储起来,比如放到cookie中 客户端每次向服务端请求资源时需要携带服务端签发的token,可以在cookie或者header中携带 服务端收到请求,然后去验证客户端请求里面带着的token,如果验证成功,就向客户端返回请求数据 安装 jwt 扩展 composer require firebase/ph

程序员峰峰 4355

thinkphp6 分布式 api环境集成 token验证 + redis + mysql + redis

thinkphp6分布式 api环境集成 token验证 + redis + mysql + redis 基础环境搭建 下载安装 phpstudy 链接 :https://www.xp.cn 安装redis 安装php redis 支持 安装thinkPhp6 官网地址http://www.thinkphp.cn/ 文档https://www.kancloud.cn/manual/thinkphp6_0/1037481 根据文档完成Composer 和 thinkp...

weixin_39001363的博客 1424
上一篇: php实现身份证号码获取归属地地址的实例
下一篇: Thinkphp6Excel导入导出
陈卿诺语
博客等级 码龄5年 167粉丝 60原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值