本文目录

      • 一、什么是 JWT
      • 二、在 ThinkPHP 中安装 JWT
      • 三、签发 Token 示例
      • 四、使用 Token 示例

一、什么是 JWT

JWT,全称:Json Web Token,可以看成是一种 Token 签发方案。

Token 通常叫做认证令牌,用于客户端和服务端在交互时的身份认证。

JWT 的优势:

  1. 数据量小,传输速度快。
  2. 使用 json 数据格式,可跨语言。
  3. 即签即发,不需要在服务端保存。
  4. 适合移动端。

更多关于 JWT 的信息可访问官网查看 >>>

二、在 ThinkPHP 中安装 JWT

先去官网挑选适合自己项目的库。

进入官网,选择 Libraries ,选择 PHP 语言过滤。

在这里插入图片描述

每个库都有对应的 composer 命令。

这里选择第一个,在 ThinkPHP 项目根目录下执行命令安装:

composer require firebase/php-jwt

三、签发 Token 示例

public function createToken()
{
    $jwtContent = [
    	// 签发人,这里采用当前站点域名
        'iss' => request()->domain(),
        // 签发时间,当前时间戳
        'iat' => time(),
        // 到期时间,1天后
        'exp' => time() + 86400,
        // 自定义数据
        'data' => [
            'user_id' => 1,
            'user_name' => 'jack'
        ]
    ];
    // 自定义 key,用于加密 token,只保存在服务端,不可泄漏。
    $key = 'iwsojfiowejgiroegnioamr';
    // 使用 HS256 算法,生成 token 。
    $token = JWT::encode($jwtContent, $key, 'HS256');
    // 打印输出
    halt($token);
}

结果示例:

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vd3d3LnRwNS5jb20iLCJpYXQiOjE2Njc3ODk2MDEsImV4cCI6MTY2Nzc4OTYyMSwiZGF0YSI6eyJ1c2VyX2lkIjoxLCJ1c2VybmFtZSI6MTIzfX0.JWBTMvl_6vv3SBCm5moM6BzYqvb8Kr7PQ6VnTL66HLc

生成 tokenJWT 提供了以下字段可以选择:

iss:发行者
exp:到期时间
sub:主题
aud:用户
nbf:生效时间
iat:发布时间
jti:JWTID,用于标识该JWT

四、使用 Token 示例

public function checkToken()
{
    try {
    	// 此 key 必须和生成 token 时的一致。
        $key = 'iwsojfiowejgiroegnioamr';
        // 接收客户端提交的 token 。
        $token = input('token/s');
        $test = JWT::decode($token, new Key($key, 'HS256'));
        halt((array)$test);
    } catch (SignatureInvalidException $signatureInvalidException) {
    	// 获取验证失败时抛出的错误信息
    	halt($signatureInvalidException->getMessage());
    } catch (ExpiredException $expiredException) {
    	// 获取 token 过期时抛出的错误信息
    	halt($expiredException->getMessage());
    } catch (Exception $exception) {
    	// 获取抛出的其它错误信息
    	halt($exception->getMessage());
    }
}

解析 token 成功示例:

array(4) {
  ["iss"] => string(18) "http://www.tp5.com"
  ["iat"] => int(1667802222)
  ["exp"] => int(1667888622)
  ["data"] => object(stdClass)#13 (2) {
    ["user_id"] => int(1)
    ["username"] => string(4) "jack"
  }
}

解析 token 失败示例:

Signature verification failed

解析 token 过期示例:

Expired token
在 ThinkPHP 中使用 JWT 签发 Token

相关文章

  1. AttributeError: ‘bytes‘ object has no attribute ‘encode‘异常解决方案

    AttributeError: bytes object has no attribute encode是:“字节”对象没有属性的编码的意思。 很明显,是编码格式的问题,例如:已经是byte格式的字符串类型,二次进行encode的时候就会出现这个bug,示例如下…...

    2023/6/9 1:59:21
  2. Neo4j 开发者大会 NODES 2022 活动日程已发布 - 11.16 ~ 11.17

    各位 Graphistas: Neo4j 开发者大会 NODES 2022 将在 2022 年 11 月 16~17 日召开,不要错过这连续 24 小时跨越 3 个主要时区的大型在线活动,欢迎加入我们一起庆祝来自全球图技术社区的隆重分享。 现在访问官方网站注册活动: ht…...

    2023/5/24 8:32:23
  3. vue脚手架的安装和使用

    vue的脚手架工具——vue/cli 特点 Vue CLI 是⼀个基于 Vue.js 进行快速开发的完整系统 Vue CLI: Vue command line interface vue命令行接口 特点:1.一个运行时依赖 (vue/cli-service),该依赖:2.可升级;3.基于 webpack 构建,并带有…...

    2023/5/31 7:32:54
  4. Unity 面试:性能优化之内存篇

    前言 本文和传统的内存优化不一样,不是讲如何降低内存占用,而是讲编程开发中要注意的内存问题以及一些内存技术的演变与原理。 本文很长,目录如下: 对惹,这里有一个游戏开发交流小组,希望大家可以点击进来一起交流一…...

    2023/6/7 14:35:25
  5. Mybase使用教程-不古出品

    Mybase使用教程-不古出品Mybase使用教程Mybase Desktop简介使用方法、常见问题及注意事项Mybase Desktop 基本使用方法如何更有效运用 Mybase 软件如何从浏览器中抓取网页内容和图片保存到 Mybase 数据库中是否限制用户导出数据库中保存的文档资料是否会在后台联网上传用户数据…...

    2023/6/8 16:37:37
  6. 移动Web:Less 预处理及Koala工具

    css 预处理器,后缀名为 .less。 less 代码无法被浏览器识别,实际开发需要转换成 css,使用 liink 标签引入 css 文件。 插件工具 Easy Less VS Code 内置插件(less 文件保存自动生成 css 文件) 更改编译后 css 存储路径…...

    2023/5/30 3:17:05
  7. uni-app - 树形结构选择器组件(支持单选 / 多选 / 可选择父级 / 弹框形式)树形控件 tree 无限级节点树,树插件完整源码,最好用的组件教程

    前言 网上的教程代码非常乱且都有 BUG 存在,非常难移植到自己的项目中,本文代码干净整洁注释详细。 本文实现了 全端兼容的树状(tree)节点选择器,随意动态切换 “单选” 和 “多选”,流畅无 BUG, 您直接复制组件源码,按照详细示例+超详细的注释和属性配置文档,保证轻…...

    2023/6/8 15:56:55
  8. SQL之数据库连接

    前面我们介绍了一些理论知识。现在来学一下实际工程中数据库是如何与java,android等项目连接的。 1、java与mysql连接(JDBC) java语言应用广泛,但是纯java如何实现和数据库的通信是很难的。业界存在许多不同的数据库且每种数据库所使用的协议…...

    2023/6/3 18:30:40
  9. k8s管理工具kubectl详解(一)

    目录 一、陈述式管理 1.陈述式资源管理方式 2.k8s相关信息查看 查看版本信息 查看节点信息 查看资源对象简写 查看集群信息 配置kubectl自动补全 查看日志 基本信息查看 查看master节点状态 查看命名空间 3.命名空间操作 查看default命名空间的所有资源 创建命名空间…...

    2023/5/29 17:46:11
  10. 2022-2028全球中性电极行业调研及趋势分析报告

    据恒州诚思调研统计,2021年全球中性电极市场规模约 亿元,2017-2021年年复合增长率CAGR约为%,预计未来将持续保持平稳增长的态势,到2028年市场规模将接近 亿元,未来六年CAGR为 %。 本文调研和分析全球中性电极发展现状及…...

    2023/5/30 20:41:23
  11. HackTheBox You know racecar 格式化字符串漏洞pwn题目

    题目网址: https://app.hackthebox.com/challenges/racecar解压密码为hackthebox 文件信息收集 file racecar这是一个32位的程序,动态链接的 checksec vuln防护都开着的,从上到下依次是 32位程序 全部RELRO 开启栈保护 启用数据执行防护…...

    2023/6/3 5:33:25
  12. Vuex基础知识

    在开发中,应用程序有时需要处理各种各样的数据,这些数据需要保存在我们应用程序中的某一个位置,对于这些数据的管理我们称之为状态管理。 Vuex 官方文档 Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式 库。它采用集中式存储管理应用…...

    2023/6/8 10:34:36
  13. R语言求风险价值VaR Value at Risk

    全文链接:http://tecdat.cn/?p2982 原文出处:拓端数据部落公众号 风险价值是衡量与投资组合相关的风险水平的统计方法。风险价值在指定的时间范围内和给定的置信水平下测量最大损失量。 视频:风险价值VaR原理与Python蒙特卡罗Monte Carlo模…...

    2023/6/5 23:47:15
  14. 新型靶向RAS突变的共价抑制剂 | MedChemExpress

    RAS (Rat Sarcoma)是一个 GDP/GTP 结合定位于膜内侧的蛋白,其与 GDP 结合是非活化状态,与GTP结合是活化状态。由 RAS-GDP 到 RAS-GTP 的转化需要 GEF(鸟苷酸交换因子)的作用,从 RAS-GTP 到 RAS-GDP 需要 GAP (GTP酶激活蛋白)的作用。该基因家…...

    2023/6/1 19:44:54
  15. 讲讲vue3下会造成响应式丢失的情况

    题引: 在我们从vue2过渡到vue3的时候,对于数据响应式的变化其实是懵懵懂懂的。从以往直接在data函数里面定义变量到每一次都要使用ref/reactive时,是有些不适应的。但问题不大,毕竟在大前端时代中,如果不及时跟上时代…...

    2023/6/2 22:55:12
  16. SpringCloud:NetFlix

    1.初步了解SpringCloud ​​​​​​SpringCloud的几种实现 常见面试题 1.什么是微服务?2.微服务之间是如何独立通讯的?3.SpringCloud 和 Dubbo有那些区别?4.SpringBoot 和 SpringCloud,请谈谈你对他们的理解5.什么是服务熔断&…...

    2023/6/4 19:46:43
  17. 第1关:Hadoop集群的部署,安装和管理

    我们准备了三台虚拟服务器,连接方式如下: 服务器SSH密码ipmasterssh 172.18.0.2123123172.18.0.2slave1ssh 172.18.0.3123123172.18.0.3slave2ssh 172.18.0.4123123172.18.0.4 第一步我们需要在 evassh 服务器初始化虚拟服务器: cd /opt wr…...

    2023/6/5 20:40:54
  18. Jobsystem学习记录

    Jobsystem jobsystem 为了解决unity多线程问题jobsystem 为了避免资源竞争问题,jobsystem给job数据的拷贝,而不是数据的引用。 NativeContainer 使用数据拷贝,导致job计算结果与外部隔离,我需要将结果放到共享内存NativeContaine…...

    2023/5/23 20:24:07
  19. 【python的静态方法,classmethod方法和__call___魔法方法】

    classmethod魔法方法和staticmethodstaticmethod,静态方法classmethod,绑定类方法__call__,可调用类类方法staticmethod,静态方法 在python中,使用静态方法可以实现不需要实例化对象的绑定就可以直接调用的函数&#…...

    2023/6/6 14:12:09
  20. 精读《素书》精彩语录及感悟篇(一)

    原始章 道,德,仁,义,礼,此五者为人只根本,立身成名的道理。 原始章论述的是做人处事的道理。 原文: 夫道、德、仁、义、礼,五者一体也。 道者,人之所蹈,使万物不知其所由。 德者,人之所得,使万物各得其所欲。 仁者,人之所亲,有慈惠恻隐之心,以遂其生成。…...

    2023/5/27 15:49:34

最新文章

  1. 【多同步挤压变换】基于多同步挤压变换处理时变信号和噪声信号研究(Matlab代码实现)

    💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

    2023/6/9 12:02:50
  2. MINIX 已死,Linux 又将如何呢?

    导读MINIX 操作系统大约的确已经死了。Minix 原来是荷兰阿姆斯特丹的 Vrije 大学计算机科学系的 Andrew S. Tanenbaum 教授所开发的一个类 Unix 操作系统,全部代码共约 12,000 行,起初是为给学生讲解操作系统的运作细节而开发。 Linus Torvalds 也曾表示…...

    2023/6/9 11:59:56
  3. linux ubi文件系统更新失败问题分析2

    昨天打包了一个ubi根文件系统,打包成功,写板子flash成功,但系统运行后还是老的文件系统,具体过程如下: 使用脚本1,打包rootfs系统: 打包后的文件系统,下载到板子后,查看…...

    2023/6/9 11:59:34
  4. 【大数据之路5-1】数据仓库工具 Hive

    5. 数据仓库工具 Hive 1. Hive 概述1. Hive 核心概念2. Hive 优势3. Hive 特点4. Hive 和 RDBMS(关系型数据库)的对比【面试点】5. Hive 架构1. 用户接口2. 内部架构组件3. 底层支撑 Hadoop4. 元数据 MetaStore5. 执行流程6. Hive 的数据存储1. Hive 数据结构1. 相关说明2. H…...

    2023/6/9 11:59:14
  5. 41从零开始学Java之向上转型与向下转型是怎么回事?

    作者:孙玉昌,昵称【一一哥】,另外【壹壹哥】也是我哦 千锋教育高级教研员、CSDN博客专家、万粉博主、阿里云专家博主、掘金优质作者 前言 面向对象的第三个特征是多态,实现多态有三个必要条件:继承、方法重写和向上转…...

    2023/6/9 11:58:54
  6. 7个最佳WooCommerce跨境电商社交媒体插件

    在互联的早期,您通常可以将产品直接放到网上并出售。但在今天你必须进行营销和做广告。如果没有包括社交媒体在内的可持续营销策略,您的商店可能会被忽视。值得高兴的是,有很多 WooCommerce跨境电商社交媒体插件可以用来传播信息,…...

    2023/6/9 11:58:42
  7. SQL注入防御-WAF Bypass技巧(5)

    0x00前言 X-WAF是一款适用中、小企业的云WAF系统,让中、小企业也可以非常方便地拥有自己的免费云WAF. 本文从代码出发,一步步理解WAF的工作原理,多姿势进行WAF Bypass。 0x01 环境搭建 官网: https://waf.xsec.io github源码: https://github.com/xsec-lab/x-waf X-WAF下载安…...

    2023/6/9 11:58:01
  8. 知识变现海哥:三招教你把知识产品快速卖出去

    哈喽,大家好,我是海哥,知识付费变现创业教练,教育公司培训总监,从事知识付费变现咨询10年,已助力3000人实现知识付费变现。 很多人知识产品也有了,就是不好意思卖,不好意思收钱 因为…...

    2023/6/9 11:57:37
  9. 爬虫一般怎么解决加密问题?

    ① 对于网页端来说通常加密的算法是写在 js 代码里的,所以首先你要对 js 语言有所了解。 至少知道 js 基础的内容,其次找到对应 js 加密代码,然后找出关键的函数。 把 js 代码在 node.js 环境进行调试,最后在 Python 环境下利用…...

    2023/6/9 11:57:26
  10. 超大规模数据库集群保稳系列之三:美团数据库容灾体系建设实践

    本文整理自美团技术沙龙第75期的主题分享《美团数据库攻防演练建设实践》,系超大规模数据库集群保稳系列(内含4个议题的PPT及视频)的第3篇文章。 本文重点介绍了美团数据库的容灾体系建设实践,主要内容包括业务架构、数据库容灾平…...

    2023/6/9 11:56:12
  11. Redis学习总结(一)

    Redis 持久化机制 RDB 持久化 Redis RDB(Redis DataBase)是Redis的一种持久化方式。它可以将Redis中的数据快照存储在硬盘上,并在需要时重构该数据快照。因为可以在磁盘上存储和重构数据快照,所以RDB是一种非常高效的Redis数据备…...

    2023/6/9 11:54:49
  12. 谷歌发布一个免费的生成式人工智能课程

    在过去几周,我们看到的都是AI将如何改变生活,无论是ChatGPT的文本生成,还是SD,Midjourney 的图像生成,这些AI的特点就是都是生成式的AI。而几天前,谷歌推出了一个生成式人工智能学习课程,课程涵…...

    2023/6/9 11:54:11
  13. 实验3 Tomasulo算法【计算机系统结构】

    实验3 Tomasulo算法【计算机系统结构】 前言推荐实验3 Tomasulo算法1 实验目的2 实验平台3 实验内容和步骤4 实验总结与心得 最后 前言 2023-6-9 9:19:50 以下内容源自《【计算机系统结构】》 仅供学习交流使用 推荐 实验2 指令调度和延迟分支【计算机系统结构】 实验3 To…...

    2023/6/9 11:53:56
  14. Java中的并发工具类详解

    在JDK的并发包里提供了几个非常有用的并发工具类。CountDownLatch、CyclicBarrier和Semaphore工具类提供了一种并发流程控制的手段,Exchanger工具类提供了在线程间交换数据的一种方法。 它们都在java.util.concurrent包下。先总体概括一下都有哪些工具类&#xff0…...

    2023/6/9 11:53:33
  15. 04_索引的使用场景

    1. 哪些情况需要创建索引 主键自动建立唯一索引 频繁作为查询条件的字段应该创建索引 查询中与其它表关联的字段,外键关系建立索引 单键/组合索引的选择问题, 组合索引性价比更高 查询中排序的字段,排序字段若通过索引去访问将大大提高排…...

    2023/6/9 11:52:55
  16. Android Radio实战——常见问题总结(十七)

    本篇文章主要分析总结开发中遇到的常见问题,会不定期更新添加内容。 1、找不到Radio服务 问题背景 项目代码从 Android 9.0 迁移到 Android 11 上。车机上电后出现如下错误: android.os.ServiceManager$ServiceNotFoundException: No service published for: broadcastrad…...

    2023/6/9 11:52:25
  17. LeetCode-C#-0003.无重复字符的最长子串

    0.声明 该题目来源于LeetCode 如有侵权,立马删除。 解法不唯一,如有新解法可一同讨论。 1.题目 0003无重复字符的最长子串 给定一个字符串s,请你找出其中不含有重复字符的最长子串的长度。 示例 1: 输入: s “abcabcbb” 输出: 3 解释: …...

    2023/6/9 11:51:31
  18. RabbitMQ - 发布确认高级

    RabbitMQ - 发布确认高级 发布确认 springboot 版本回退消息备份交换机 在生产环境中由于一些不明原因,导致 RabbitMQ 重启,在 RabbitMQ 重启期间生产者消息投递失败, 导致消息丢失,需要手动处理和恢复。于是,我们开始…...

    2023/6/9 11:50:55
  19. 2021年国赛高教杯数学建模B题乙醇偶合制备C4烯烃解题全过程文档及程序

    2021年国赛高教杯数学建模 B题 乙醇偶合制备C4烯烃 原题再现 C4 烯烃广泛应用于化工产品及医药的生产,乙醇是生产制备 C4 烯烃的原料。在制备过程中,催化剂组合(即:Co 负载量、Co/SiO2 和 HAP 装料比、乙醇浓度的组合&#xff0…...

    2023/6/9 11:50:35
  20. 如何做一个智能家居系统

    智能家居系统是一种将物联网技术应用于家庭环境中的智能化系统。它可以通过智能设备和传感器来监测和控制家庭设备和环境,从而提高生活质量和便利性。本文将介绍如何构建一个智能家居系统。 一、硬件设备的选择 智能家居系统需要一些硬件设备来实现控制和监测。这些设备包括…...

    2023/6/9 11:50:17