IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> JWT Token 的生成及解密 -> 正文阅读

[PHP知识库]JWT Token 的生成及解密

文章目录


一、登录流程?

前端发送请求 -> 后端验证通过后签发 Token ->?前端存入token,在请求其他接口是将token带入header头中

二、使用步骤

1.引入?jwt 库

安装:

composer require firebase/php-jwt

依赖composer,通过?cmd?进入项目根目录 或者?项目终端?安装:

检查项目vendor文件中生成了以下文件就代表安装成功

引入:?

?use Firebase\JWT\JWT;? ? ? ?

2.生成 token

代码:

    public function loginpwd($username, $password)
    {
        $password = md5($password);
        $loginpwd = new user();
        $checkuser = $loginpwd->checkuser($username, $password);
        if ($checkuser['code'] == 0) { 
            return json($checkuser);
        } else if ($checkuser['code'] == 1) { 
            $key = 'adminTokenpwd';
            $token = array(
                "iat" => time(),
                "nbf" => time(),
                "exp" => time() + 60 * 60 * 24 * 7,
                "uid" => $checkuser['id']
            );
            $jwt = JWT::encode($token, $key, "HS256");
            return json(['code' => 1, 'msg' => '登陆成功', 'token' => $jwt]);
        } else { 
            return json($checkuser);
        }
    }

?核心:

               $key = 'adminTokenpwd';? ? ? ? ? ? ? ? ?//自定义key,必须与验证token中的key一致

               $token = array(

               "iat" => time(),? ? ? ? ? ? ? ? ? ? //?jwt的签发时间

               "nbf" => time(),? ? ? ? ? ? ? ? ? ? //定义在某个时间前 jwt 是不可用的

               "exp" => time() + 60 * 60 * 24 * 7,? ?// jwt 的过期时间(大于签发时间),规则:秒*分*时*天

               "uid" => $checkuser['id']? ? ? ? ? ?// 自定义的数据:这里我带了用户id

            );

? ? ? ? ? ?    $jwt = JWT::encode($token, $key, "HS256");? ? ? //调用方法

?返回数据格式:

3.解密?token

我是在控制器中单独创建的一个Token文件,也可以放在中间件。

这里我继承的BaseController ,其他接口文件直接继承Token

引入:

use Exception;
use Throwable;
use Firebase\JWT\JWT;
use app\BaseController;
use Firebase\JWT\ExpiredException;
use Firebase\JWT\BeforeValidException;
use Firebase\JWT\SignatureInvalidException;

验证方法:

class Token extends BaseController
{
    /**
     * Token验证
     */
    // 验证 token
    protected function initialize()
    {
        parent::initialize();
        $header = request()->header();
        if (!isset($header['token']) || $header['token'] == null) {
            echo json(['code' => 0, 'msg' => 'token不能为空'], 400)->send();
            die();
        }
        $token = $header['token'];
        
        $key = 'adminTokenpwd'; // 解密token,key必须与签发token中的key一致
        try {
            $info = JWT::decode($token, $key, ['HS256']);
            $this->uid = $info->uid;
        } catch (SignatureInvalidException $e) { //签名不正确
            echo json(['code' => 0, 'status' => $e->getCode(), 'msg' => '签名不正确'], 400)->send();
            die();
        } catch (BeforeValidException $e) { // 签名在某个时间点之后才能用
            echo json(['code' => 1, 'status' => $e->getCode(), 'msg' => '账号未到可用时间'], 400)->send();
            die();
        } catch (ExpiredException $e) { // token过期
            echo json(['code' => 2, 'status' => $e->getCode(), 'msg' => '登录状态过期'], 400)->send();
            die();
        } catch (Exception $e) { //其他错误
            echo json(['code' => 3, 'status' => $e->getCode(), 'msg' => '非法操作'], 400)->send();
            die();
        } catch (Throwable $e) {
            echo json(['code' => 3, 'status' => $e->getCode(), 'msg' => '非法操作'], 400)->send();
            die();
        }
    }
}

总结

团结就是力量,分享是温故知新

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2022-02-19 00:56:09  更:2022-02-19 00:57:20 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/27 5:15:05-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计