jwt验证 thinkphp8

JWT是json web token缩写。它将用户信息加密到token里,服务器不保存任何用户信息。服务器通过使用保存的密钥验证token的正确性,只要正确即通过验证。基于token的身份验证可以替代传统的cookie+session身份验证方法。

它定义了一种用于简洁,自包含的用于通信双方之间以 JSON 对象的形式安全传递信息的方法。JWT 可以使用 HMAC 算法或者是 RSA 的公钥密钥对进行签名。它具备两个特点:

简洁(Compact):可以通过URL, POST 参数或者在 HTTP header 发送,因为数据量小,传输速度快

首先,我们需要安装JWT的PHP库,可以使用composer进行安装:

composer require firebase/php-jwt

然后,我们可以在ThinkPHP8中创建一个JWT的工具类:

<?phpnamespace app\common\lib;use Firebase\JWT\JWT;class Auth
{public static function createToken($userid){$key = md5('my_secret_key');$token = ["iss" => 'issuer',  // 签发者"iat" => time(),    // 签发时间"nbf": time(),//该时间之前不接收处理该Token"exp" => time() + 7200, // 过期时间"aud" => 'audience', // 接收者"sub" => 'subject',  // 主题"data" => [         // 自定义信息'userid' => $userid]];$jwt = JWT::encode($token, $key);return $jwt;}public static function checkToken($token){$key = md5('my_secret_key');try {$decoded = JWT::decode($token, $key, ['HS256']);return (array) $decoded->data;} catch (\Firebase\JWT\SignatureInvalidException $e) {// 签名无效throw new \Exception('SignatureInvalidException');} catch (\Firebase\JWT\ExpiredException $e) {// token过期throw new \Exception('ExpiredException');} catch (\Firebase\JWT\BeforeValidException $e) {// token在当前服务器时间之前throw new \Exception('BeforeValidException');} catch (\Exception $e) {// 其他错误throw new \Exception($e->getMessage());}}
}

在登录接口中,我们可以创建一个JWT token,并将其返回给客户端:

public function login()
{// 假设用户验证通过后获取用户ID$userid = 1;$token = Auth::createToken($userid);return json(['token' => $token]);
}

 

在其他需要验证的接口中,我们可以使用JWT token来验证用户身份:

public function index()
{$token = Request::header('Authorization');if (empty($token)) {return json(['error' => 'Token is missing'], 401);}try {$userid = Auth::checkToken($token)['userid'];// 使用$userid进行其他操作} catch (\Exception $e) {return json(['error' => $e->getMessage()], 401);}return json(['message' => 'Success']);
}

在上述代码中,我们首先创建了一个token,然后在需要验证的接口中,从HTTP头信息中取出token,并使用我们的密钥对其进行解析。如果解析成功,我们就可以从中获取用户的ID,然后进行后续的操作。如果解析失败,我们将返回错误信息。 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/149238.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

一键搞定!这4款在线音频剪辑神器,你值得拥有!

嘿&#xff0c;小伙伴们&#xff0c;是不是有时候感觉手中的音乐或者语音素材需要经过一番精雕细琢才能完美呈现呢&#xff1f;今天&#xff0c;我就来给大家分享几款超好用的在线音频剪辑工具&#xff0c;让你在轻松愉快的氛围中&#xff0c;享受剪辑的乐趣&#xff0c;体验到…

MySQL函数:流程函数

1.IF函数 基本语法&#xff1a;IF(expr1,expr2,expr3) 功能&#xff1a;如果value为true&#xff0c;返回t&#xff0c; 否则返回f 例如&#xff1a;这个里面expr1里面是false&#xff0c;返回的是Error&#xff0c;如果是true&#xff0c;返回OK select if(false, OK, Err…

OAuth 2.0第三方授权登录

认证和授权的概念和区别 认证 (Authentication[ɔːˌθentɪˈkeɪʃn] )&#xff1a; 你是谁。授权 (Authorization[ˌɔːθəraɪˈzeɪʃ(ə)n])&#xff1a; 你有权限干什么。 概念&#xff1a; Authentication&#xff08;认证&#xff09; 是验证您的身份的凭据&…

利用大型语言模型轻松打造浪漫时刻

当情人节年年如约而至&#xff0c;每每都需费尽心思为对方营造一场令人难忘的仪式&#xff0c;却因缺乏创意与思路而倍感困扰。今天&#xff0c;我决定让大型语言模型为我们提供一些灵感和建议&#xff0c;让我们能够轻松实现这一目标。让我们开始行动吧&#xff01;此前&#…

Paper 0 | Visual Instruction Tuning

使用机器生成的指令跟踪数据对大型语言模型 (LLM) 进行指令调整已被证明可以提高新任务的零样本能力&#xff0c;但这个想法在多模态领域的探索较少。我们首次尝试使用纯语言 GPT-4 生成多模态语言图像指令跟踪数据。通过对此类生成的数据进行指令调整&#xff0c;我们引入了 L…

手语手势识别系统源码分享

手语手势识别检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vis…

Python_面向对象属性与方法

Python完全采用了面向对象的思想&#xff0c;是真正面向对象的编程语言&#xff0c;完全支持面向对象的基本功能&#xff0c;例如&#xff1a;继承、多态、封装等。Python中&#xff0c;一切皆对象。我们在前面学习的数据类型、函数等&#xff0c;都是对象。 面向过程和面向对象…

DataGemma:谷歌大模型

诸神缄默不语-个人CSDN博文目录 DataGemma是谷歌出的大模型&#xff0c;是gemma 2的升级版&#xff0c;主要亮点是基于检索解决幻觉问题。 在huggingface和kaggle上均可下载模型权重。 检索数据源是Google’s Data Commons知识图谱。 官方博客&#xff1a;https://blog.googl…

frp内网穿透服务器+客户端详细配置

当我们拥有一台云服务器时&#xff0c;可以将局域网服务器的服务通过内网穿透发布到公网上。frp是一个主流的内网穿透软件&#xff0c;本文讲解frp内网穿透服务器客户端详细配置。 一、需要准备的内容&#xff1a; 腾讯云服务器&#xff1a;https://curl.qcloud.com/Sjy0zKjy 2…

红外图像绝缘子识别数据集

红外图像绝缘子识别数据集&#xff0c;数据集一共919张图片&#xff0c;标注为voc格式&#xff0c;可以转yolo格式 数据集名称 红外图像绝缘子识别数据集 (Infrared Insulator Recognition Dataset, IIRD) 数据集描述 IIRD是一个专为电气工程领域设计的小规模红外图像数据集…

发文章到arXiv的处理

版权问题&#xff1a; IEEE会议&#xff0c;刊物可以发arXiv 官方说明&#xff1a; Post-Publication Policies - IEEE Author Center Journals 上传时加上一句说明就行 “This work has been submitted to the IEEE for possible publication. Copyright may be transferr…

前缀和(1)_【模板】前缀和_模板

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 前缀和(1)_【模板】前缀和_模板 收录于专栏【经典算法练习】 本专栏旨在分享学习算法的一点学习笔记&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目录 …

VM ware的安装——个人使用

VM ware的安装 Workstation 和 Fusion 对个人使用完全免费&#xff0c;企业许可转向订阅 如果没有官方账号需要注册一个 选择个人下载&#xff0c;会跳转到下一个页面 要勾选同意&#xff0c;才能下载 点击下载之后还会跳转到填写地址的页面&#xff0c;填写完同意后&#x…

免费与付费代理IP工具的优缺点分析

面对市场上众多的代理IP工具&#xff0c;选择合适的工具成为一项挑战。本文将深入分析免费与付费代理IP工具的优缺点&#xff0c;协助您做出明智的选择。 一、免费代理IP工具的优缺点 优点&#xff1a; 零成本&#xff1a;最大的优点在于无需任何费用。对于预算有限的用户&a…

Cortex-M7核心寄存器

参考内容&#xff1a;Cortex-M7编程手册 文章目录 软件执行的处理器模式和权限级别处理器模式软件执行的权限级别 栈Stacks核心寄存器Core registers通用寄存器General-purpose registers链接寄存器Link register程序计数器 Program counter程序状态寄存器Program status regis…

18.1 k8s服务组件之4大黄金指标讲解

本节重点介绍 : 监控4大黄金指标 Latency&#xff1a;延时Utilization&#xff1a;使用率Saturation&#xff1a;饱和度Errors&#xff1a;错误数或错误率 apiserver指标 400、500错误qps访问延迟队列深度 etcd指标kube-scheduler和kube-controller-manager 监控4大黄金指标 …

PHPMailer在PHP5.3.3以下版本的使用详解

《PHPMailer在PHP5.3.3以下版本的使用详解》 PHPMailer是一款广泛使用的PHP邮件发送类库&#xff0c;它提供了一套完整的邮件发送解决方案&#xff0c;包括SMTP验证、HTML邮件支持等功能。在PHP5.3.3及以下版本的环境中&#xff0c;由于语言特性和库的限制&#xff0c;选择适合…

【学习笔记】TLS/SSL握手

前言&#xff1a;本篇将介绍TLS握手的实际握手过程&#xff0c;TLS握手创建了Client和Server之间“被保护的通道”&#xff0c;2个单向通道用来保护批量数据的传输&#xff08;通过Confidentiality、Integrity和Authentication&#xff09;&#xff0c;一个通道是从Client到Ser…

辞职后你说你想去外面玩玩,我看你寸步未行,原来你是去了JDK以外的方面玩玩

按需阅读 兄弟们&#xff01;我被面试官吊打了Java面试Question A&#xff1a;如果距离世界末日只剩一天你能干什么&#xff1f;面试官&#xff1a;世界末日前我想看视频面试官&#xff1a;给点创意好不好&#xff1f;面试官&#xff1a;如果有一天我想换个姿势看图片 Java面试…

C++基础:第一个C++程序

初学C #include<iostream> int main() {std::cout << "Enter two numbers:" << std::endl;int v1 0, v2 0;std::cin >> v1 >> v2;std::cout << "The sum of "<< v1 << " and " << v2&…