PHP JWT简易使用

今天突然就想用一下jwt生成一下token,那么说干就干
首先我先下载了一下composer
composer.phar
下载到本地以后,通过cmd命令行进行下载php-jwt,命令为:

php composer.phar require firebase/php-jwt

图片效果
在这里插入图片描述
在这里插入图片描述
vendor文件夹下就有我们所想要的文件
在这里插入图片描述
现在我们移入我们的根目录
在这里插入图片描述
现在我们进入登录页面,然后进行发放token,第一个框是账户,第二个是密码
在这里插入图片描述
这里是我们jwt.html 的源码

<!doctype html>
<!--suppress ALL -->
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>JWT</title>
</head>
<body>

    <input type="text" name="username" id="username">
    <input type="password" name="password" id="password">
    <button class="sub">提交</button>
    <input type="reset" value="重置">

<div class="power">
    确认是否有权限
</div>
</body>
<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.js"></script>
<script>
  $('.sub').click(function(){

      $.ajax({
          type:'GET',
          url: "./login.php",
          data:{
              username:$('#username').val(),
              password: $('#password').val()
          },
          success:function (e) {
              localStorage.setItem('token',e);
              console.log(localStorage.getItem('token'));
          }
      })
  })

  $('.power').click(function(){

      if (localStorage.getItem('token') == null) {
          alert('请登录获取token')

          return false;
      }

      $.ajax({
          type:'GET',
          url: "./index.php",
          headers:{
              token:localStorage.getItem('token')
          },
          success:function (e) {

          }
      })
  })

</script>
</html>

这个是我们点击提交ajax进行访问的php文件

<?php
use \Firebase\JWT\JWT;
require './vendor/autoload.php';
ini_set("display_errors","On");
error_reporting(E_ALL);

$config =  [
    'username' => 1,
    'password' => 1
];

$params = $_GET;

if ($config != $params) {
    echo 'username or password Wrong';
    die;
}

$key = "wrkwd";

$payload = array(
    "iat" => time(),
    "nbf" => time(),
    'exp' => time()+60,
    'id' => 1
);

$jwt = JWT::encode($payload, $key);
echo $jwt;


我们输入账号跟密码点击提交,然后获取token,并存入浏览器缓存
在这里插入图片描述

然后我们点击确认是否有权限。
在这里插入图片描述
然后我们等待60s(我设置的exp 为60s),在进行点击返回的是
在这里插入图片描述
点击确认是否有权限的php文件(index.php)代码为

<?php
use \Firebase\JWT\JWT;
require './vendor/autoload.php';
ini_set("display_errors","On");
error_reporting(E_ALL);

$headers = getallheaders(); //获取所有header头信息

if (!isset($headers['Token'])) {
    echo 'No Have Token'; die;
}
$key = "wrkwd";
$token = $headers['Token'];

try {
    $decoded = JWT::decode($token, $key, array('HS256'));
    echo 'Token 有效';
    
} catch (Firebase\JWT\ExpiredException $exception){
    echo 'Token 无效';
}

这次是我简单的尝试奥,如果有什么问题,希望各位大佬可以提供帮助,谢谢大佬们!!

总结
1.账号密码登录,若正确则返回token
2.浏览器接收到token,存入本地(浏览器)缓存中
3.每次访问相关权限的时候,把本地缓存放入header头进行访问
4.php拦截器进行判断token。

希望自己可以努力成为自己想要的样子,加油加油!!!,大家也一起加油!!!


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