Thinkphp6集成JWT进行token认证_我其实什么都不懂的博客-程序员秘密

技术标签: php  thinkphp  

项目根目录composer下载

引入php-jwt包

composer require firebase/php-jwt

封装方法

<?php

namespace app\business;

use Firebase\JWT\ExpiredException;
use Firebase\JWT\JWT as JWTUtil;

class JWT
{
    /**
     * 根据json web token设置的规则生成token
     * @param $user_id
     * @return \think\response\Json
     */
    public static function createJwt($user_id)
    {
        //jwt的签发密钥,验证token的时候需要用到
        $key = md5(env("TOKEN.key",""));
        //签发时间
        $time = time();
        //过期时间
        $expire = $time + 14400;
        $token = array(
            //用户
            "user_id" => $user_id,
            //签发组织
            "iss" => env("TOKEN.iss",""),
            //签发作者
            "aud" => env("TOKEN.aud",""),
            //签发时间
            "iat" => $time,
            //生效时间
            "nbf" => $time,
            //过期时间
            "exp" => $expire
        );
        //返回token结果
        return json(JWTUtil::encode($token,$key));
    }

    /**
     *  进行token认证
     * @param $jwt
     * @return \think\response\Json
     */
    public static function verifyJwt($jwt)
    {
        //jwt的签发密钥,验证token的时候需要用到
        $key = md5(env("TOKEN.iss"));
        try{
            $jwtAuth = json_encode(JWTUtil::decode($jwt,$key,array("HS256")));
            $authInfo = json_decode($jwtAuth,true);
            if (!$authInfo['user_id']){
                return \json(['code'=>400,'msg'=>'用户名不存在','data'=>[]]);
            }
            return \json($authInfo);
        }catch (ExpiredException $e){
            return \json(['code'=>501,'data'=>[],'msg'=>'token已经过期']);
        }catch (\Exception $e){
            return \json(['code'=>$e->getCode(),'msg'=>$e->getMessage(),'data'=>[]]);
        }
    }
    
        /**从请求信息中获取token令牌
         * @return false|string
         */
        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));
        }


    //鉴权
    public function handle($request, \Closure $next)
    {
        $response = $next($request);

        $route = $request->pathinfo();

        if(!in_array($route,self::$arr))
        {
            $token = Jwt::getRequestToken();

            $res = Jwt::verify($token);

            if($res!="ok")
            {
                return json('验证失败');
            }
        }
        return $response;
}
}

控制器调用封装方法即可

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/H2912616818/article/details/121659862

智能推荐

linux升级openssh提示密码错误,Linux升级openssh及问题总结_weixin_39875832的博客-程序员秘密

系统版本:[[email protected] ~]# uname -aLinux db 2.6.32-431.el6.x86_64 #1 SMP Sun Nov 10 22:19:54 EST 2013x86_64 x86_64 x86_64 GNU/Linux[[email protected] ~]# cat /etc/redhat-releaseRed Hat Enterprise Linux Server release 6...

再次换博客,地址http://iwood.co.nr_不会种地的老农的博客-程序员秘密

再次换博客, Geek woodworker . 请猛点进入。博入其名,内容有计算机技术相关的,比如 http://ifq.github.com/blog/2012/09/10/baidu-blog-to-octo/ ,介绍如何通过脚本将百度博客的数据导入到octopress的博客系统中。也有木工相关的,木工作为一种业余爱好在国内并不被人熟知,可以说手工木工在中国基本绝迹,没有生态环境。我

Windows 10 安装Tensorflow gpu-1.3.0_Icoding_F2014的博客-程序员秘密

硬件配置:cpu: 锐龙1700x 显卡:GTX 1060OSWindows 10 64 企业版配置过程安装cuda8.0官网链接:https://developer.nvidia.com/cuda-80-ga2-download-archive 如果官方下载失败,则使用网盘资源: 链接:https://pan.baidu.com/s/1o9uby2m

python编程在哪里写程序-教你如何编写、保存与运行Python程序的方法_weixin_37988176的博客-程序员秘密

第一步接下来我们将看见如何在 Python 中运行一个传统的“Hello World”程序。Python教程本章将会教你如何编写、保存与运行 Python 程序。通过 Python 来运行的你的程序有两种方法——使用交互式解释器提示符或直接运行一个源代码文件。我们将了解如何使用他们二者的功能。使用解释器提示符在你的操作系统中打开终端(Terminal)程序(正如我们先前在安装章节所讨论过的那样)然...

学习PXE高效批量网络装机_码薯的博客-程序员秘密

PXE概述PXE 的全称是 preboot execute environment它其实是Intel在很久以前提出来的一项用于通过网络来引导系统的标准。允许客户机通过网络从远程服务器上下载引导镜像,并加载安装文件或者整个操作系统。实现的硬件条件1.BIOS支持2.网卡支持(现在基本都已支持)3.需要在bios中开启开关,服务器一般没打开(bmc界面里打开)4.网络中有一台 DHCP 服务器以便为客户机自动分配地址、指定引导文件位置5.服务器通过 tftp服务(简单文件...

计算广告学_X-Dragon烟雨任平生的博客-程序员秘密_计算广告学

计算广告学计算广告1、在线广告综述1.1 广告的定义与目的1.1.1 定义:1.2 在线广告类型1.3 在线广告简史1.4 广告有效性原理1.5 在线广告相关行业协会计算广告作者:刘鹏 北冥乘海生 参考视频链接:https://www.bilibili.com/video/BV1jz411z7UT笔记:X-Dragon [email protected]、在线广告综述广告越占一个国家GDP的0.5%-1%左右。网络广告》电视广告》报纸广告(后面会逐渐消退)数据:个性化流量:规模化

随便推点

为什么分布式一定要有消息队列?_LiangGzone的博客-程序员秘密

虽然已经年底了,但腾讯、字节等大厂还在招人,其他公司也开始为来年的项目储备候选人。我有个朋友,最近面试屡屡碰壁,一问原因,都是算法、高并发、消息队列这些问题。拿消息队列来说,大多数人工作...

linux系统改装win10教程,技术编辑为你解答win10系统安装Linux Mint的图文方案_苏慕凉的博客-程序员秘密

win10系统稳定性好,使用者众多;免不了会遇到win10系统安装Linux Mint这样的问题要处理,大部分伙计都是第一次看到win10系统安装Linux Mint这样的事情,有的朋友想试着解决一下win10系统安装Linux Mint的问题却不知怎样下手,其实解决方法很简单,只需采取以下两步措施:1、你需要安装新的操作系统之前做明显的事情。第一个也是最重要的一点是要备份你坐在你的计算机上的任何...

[Err] 2013 - Lost connection to MySQL server during query 的解决_咕噜呜的博客-程序员秘密

[Err] 2013 - Lost connection to MySQL server during query 的解决mysql导入表结构和数据报错在配置中找到my.ini文件,我的是mysql5.7加入max_allowed_packet = 500Mmysql配置详解: max_allowed_packethttps://www.jianshu.com/p/45967d3408d4原链接地址:https://blog.csdn.net/weixin_42259631/arti

Android 菜单(Menu)控件的使用_stoneson的博客-程序员秘密_android menu 控件

<br /><br />1.通过XML布局添加菜单<br />首先在项目目录res下建立文件夹menu,然后在新建的menu文件夹下添加<br />menu.xml<?xml version="1.0" encoding="utf-8"?><menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/about" android:title="About" />

rxjs为什么用的人少_为什么刘邦的“狐朋狗友”,都是治国大才?_weixin_39780784的博客-程序员秘密

来源:朝文社(ID:ailishi777)作为明太祖朱元璋之前,中国历代皇帝里最神奇的“创业奇迹”。汉高祖刘邦常被人津津乐道(吐槽)的,就是其无比“草根”的“创业团队”。刘邦的“创业团队”有多“草根”?以东汉学者王符的话说:“ 高祖所以共取天下者,缯肆、狗屠也;骊山之徒,钜野之盗,皆为名将”。特别是那几位最早跟刘邦“创业”的团队成员,樊哙“以屠狗为事”,夏侯婴“为沛厩司御”,灌婴“贩缯者...

页面重绘和回流以及优化_追寻北极的博客-程序员秘密

在讨论页面重绘、回流之前。需要对页面的呈现流程有些了解,页面是怎么把html结合css等显示到浏览器上的,下面的流程图显示了浏览器对页面的呈现的处理流程。可能不同的浏览器略微会有些不同。但基本上都是类似的。1.  浏览器把获取到的HTML代码解析成1个DOM树,HTML中的每个tag都是DOM树中的1个节点,根节点就是我们常用的document对象。DOM树里包含了所有HTML标签,包括d

推荐文章

热门文章

相关标签