根据博客进行jwt初始化配置

https://blog.csdn.net/weixin_43389208/article/details/117442266?spm=1001.2014.3001.5501

https://www.cnblogs.com/anhan/p/14954953.html

1.composer 安装JWT

  1. composer require lcobucci/jwt 3.3

2.在extend/tools/jwt创建Token.php

注意:如果没有该目录,则自行创建。

3.

Token.php书写以下代码

自写代码:

  1. <?php
  2.  
  3. namespace tools\jwt;
  4.  
  5. use Lcobucci\JWT\Builder;
  6. use Lcobucci\JWT\Parser;
  7. use Lcobucci\JWT\Signer\Hmac\Sha256;
  8. use Lcobucci\JWT\ValidationData;
  9.  
  10. class Token
  11. {
  12. public static function createToken($uid = null)
  13. {
  14. $signer = new Sha256();//加密规则
  15. $time = time();//当前时间
  16. $token = (new Builder())
  17. ->issuedBy('teacher')//签发人
  18. ->canOnlyBeUsedBy('student')//接收人
  19. ->identifiedBy('MarsLei', true) //标题id
  20. ->issuedAt($time)//发出令牌的时间
  21. ->canOnlyBeUsedAfter($time) //生效时间(即时生效)
  22. ->expiresAt($time + 3600) //过期时间
  23. ->with('uid', $uid) //用户id
  24. ->sign($signer, 'my') //签名
  25. ->getToken(); //得到token
  26. return (string)$token;
  27. }
  28. //在框架中对JWT解密方法进行封装。
  29.  
  30. public static function verifyToken($token=null){
  31. //检测是否接收到了token
  32. if(empty($token)){
  33. return 0;
  34. }
  35. //转化为可以验证的token
  36. $token = (new Parser())->parse((string) $token);
  37. //验证基本设置
  38. $data = new ValidationData();
  39. $data->setIssuer('teacher');
  40. $data->setAudience('student');
  41. $data->setId('MarsLei');
  42.  
  43. if(!$token->validate($data)){
  44. return 0;
  45. }
  46. //验证签名
  47. $signer = new Sha256();
  48. if(!$token->verify($signer, 'my')){
  49. return 0;
  50. }
  51. //验证通过,返回用户id
  52. return $token->getClaim('uid');
  53. }
  54.  
  55. }

重新引用以下代码,以防止报错:

书写登录表单

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title</title>
  6. <link rel="stylesheet" href="http://apps.bdimg.com/libs/bootstrap/3.3.0/css/bootstrap.min.css">
  7. </head>
  8. <body>
  9. <div style="width: 300px">
  10. <div class="form-group">
  11. <label for="name">名称</label>
  12. <input type="text" class="form-control account" name="account" >
  13. </div>
  14. <div class="form-group">
  15. <label for="name">密码</label>
  16. <input type="password" class="form-control password" name="password" >
  17. </div>
  18. <input type="hidden" name="__token__" value="{$Request.token}" />
  19. <input type="button" id="login" value="立即登录">
  20. </div>
  21. </body>
  22. </html>
  23. <script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js">
  24. </script>
  25. <script>
  26. $('#login').click(function (){
  27. var account =$('.account').val();
  28. var password=$('.password').val();
  29. var token=localStorage.getItem('token');
  30. $.ajax({
  31. url:'/ajax/login/loginSuccess',
  32. type:'POST',
  33. headers:{
  34. Authorization:token,
  35. },
  36.  
  37. data:{
  38. account:account,
  39. password:password,
  40. __token__:"{$Request.token}",
  41. },
  42. dataType:'json',
  43. success:function (res){
  44. console.log(res);
  45. if (res.code==200){
  46. alert('登录成功');
  47. //将用户res里的Token存入在本地
  48. localStorage.setItem('token',res.data.token);
  49. location.href='/ajax/ajax/index?token='+token;
  50. }
  51. }
  52. })
  53. })
  54.  
  55. </script>

切记,页面路由跳转是要携带token,由基类判断是否携带token

在模块下新创建一个Base基类控制器,书写判断代码,用于其他控制器的继承。

  1. <?php
  2.  
  3. namespace app\ajax\controller;
  4.  
  5. use think\Controller;
  6. use think\Request;
  7. use tools\jwt\Token;
  8.  
  9. class Base extends Controller
  10. {
  11. //
  12. public function __construct(Request $request = null)
  13. {
  14. parent::__construct($request);
  15.  
  16. //接收token
  17. $token=input('token');
  18. //判断$token,如果是空的,返回登录界面
  19. if (empty($token)){
  20. $this->error('缺少token参数,请先登录','/ajax/login/login');
  21. }
  22. //验证token
  23. $userId=Token::verifyToken($token);
  24. if (!$userId){
  25. $this->error('token参数失效,请先登录','/ajax/login/login');
  26. }
  27.  
  28. }
  29. }

控制器继承基类控制器

登录控制器调用Token,记录用户的id

  1. //生成token
  2. $token = Token::createToken($userInfo['id']); //生成token
  1. <?php
  2.  
  3. namespace app\ajax\controller;
  4.  
  5. use app\ajax\model\AjaxModel;
  6. use think\Controller;
  7. use think\Session;
  8. use tools\jwt\Token;
  9.  
  10. class Login extends Controller
  11. {
  12. //展示登录页面
  13. public function login(){
  14. return view();
  15. }
  16.  
  17. public function loginSuccess(){
  18. $params = $this->request->post();
  19. //验证user表是否与用户输入的信息向匹配
  20. $data = AjaxModel::getLogininfo($params);
  21. if ($params['account'] != $data['username']) {
  22. $this->error('账号输入错误', '/ajax/ajax/create');
  23. }
  24. if ($params['password'] != $data['userpassword']) {
  25. $this->error('密码输入错误', '/ajax/ajax/create');
  26. }
  27. //生成token令牌
  28. $token = Token::createToken($data['id']);
  29. //将令牌放在session中
  30. Session::set('token',$token);
  31. $data['token']=$token;
  32. //查看用户权限
  33. $id=$data['id'];
  34. $userNode= AjaxModel::getUserNodeALL($id);
  35. //模型层级完成后将数据记录到session中
  36. Session::set('userNode',$userNode);
  37. return getJsonData(200,'success', $token);
  38. }
  39. }
 

json web token JWT实现TP5创建和验证的更多相关文章

  1. JSON WEB Token(JWT)

    最近面试被问及单点登陆怎么解决?自己的项目前后端分离,自己实现token认证,token有失效时间,token中包含用户基本的信息.且一个当用户重新登陆后,原来的token就会失效,这么安全的一个to ...

  2. JSON Web Token (JWT) 简介

    JSON Web Token (JWT) 是一种基于 token 的认证方案. JSON Web Token 的结构 一个 JWT token 看起来是这样的: eyJhbGciOiJIUzI1NiI ...

  3. JSON Web Token (JWT) 实现与使用方法

    1. JSON Web Token是什么 JSON Web Token (JWT)是一个开放标准(RFC 7519),它定义了一种紧凑的.自包含的方式,用于作为JSON对象在各方之间安全地传输信息.该 ...

  4. Json Web Token(JWT)详解

    什么是Json Web Token Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的 ...

  5. JSON Web Token (JWT),服务端信息传输安全解决方案。

    JWT介绍 JSON Web Token(JWT)是一种开放标准(RFC 7519),它定义了一种紧凑独立的基于JSON对象在各方之间安全地传输信息的方式.这些信息可以被验证和信任,因为它是数字签名的 ...

  6. 漫谈JSON Web Token(JWT)

    一.背景 传统的单体应用基于cookie-session的身份验证流程一般是这样的: 用户向服务器发送账户和密码. 服务器验证账号密码成功后,相关数据(用户角色.登录时间等)都保存到当前会话中. 服务 ...

  7. 基于 Token 的身份验证:JSON Web Token(JWT)

    1.传统身份验证和JWT的身份验证 传统身份验证:       HTTP 是一种没有状态的协议,也就是它并不知道是谁是访问应用.这里我们把用户看成是客户端,客户端使用用户名还有密码通过了身份验证,不过 ...

  8. JSON Web Token (JWT) - Introduction

    To validate the challenge, connect as admin.------------以admin登陆 https://jwt.io/introduction/        ...

  9. JSON Web Token (JWT)生成Token及解密实战。

    昨天讲解了JWT的介绍.应用场景.优点及注意事项等,今天来个JWT具体的使用实践吧. 从JWT官网支持的类库来看,jjwt是Java支持的算法中最全的,推荐使用,网址如下. https://githu ...

随机推荐

  1. 让HTML和JSP页面不缓存从Web服务器上重新获取页面

    感谢原文作者:佚名 原文链接:https://www.jb51.net/web/100639.html 问题描述 用户退出后,如果点击浏览器上的后退按钮,Web应用将不能正确保护受保护的页面--在Se ...

  2. 在view中实现UIViewController的跳转 By H.L

    view中是不能进行UIViewController的push,pop等操作的,若进行跳转操作,一般是用代理,block,通知等实现,那如何实现在ViewController的subView中实现跳转 ...

  3. C++中的常见错误

    1.变量定义位置错误 1 int sum = 0; 2 3 do 4 { 5 int i = 1; 6 sum += i; 7 i++; 8 }while(i <= 100);//错误:i没有定 ...

  4. Java枚举使用笔记

    原创:转载需注明原创地址 https://www.cnblogs.com/fanerwei222/p/11833790.html Java枚举简单使用示例: package com.shineyue. ...

  5. iOS 小技巧总结

    1.获取准确的app启动所需时间 应用启动时间长短对用户第一次体验至关重要,同时系统对应用的启动.恢复等状态的运行时间也有严格要求,在应用超时的情况下系统会直接关闭应用.以下是几个常见场景下系统对Ap ...

  6. js金额转中文大写

    基础参数: var AIW_number = {0:'零', 1:'壹', 2:'贰', 3:'叁', 4:'肆', 5:'伍', 6:'陆', 7:'柒', 8:'捌', 9:'玖'} var AI ...

  7. 在MacOS安装puppeteer

    安装node:升级:npm i npm 安装yarn:需要注意先把yarn的流程跑完,特别是package.json 安装puppeteer:yarn add puppeteer 安装完成以后需要重启 ...

  8. suse 12 二进制部署 Kubernetets 1.19.7 - 第06章 - 部署kube-apiserver组件

    文章目录 1.6.部署kube-apiserver 1.6.0.创建kubernetes证书和私钥 1.6.1.生成kubernetes证书和私钥 1.6.2.创建metrics-server证书和私 ...

  9. php使用CURL实现GET和POST方式请求

    CURL请求,支持GET和POST两种方式,默认为GET方式,如果传第二个参数则为POST方式请求,设置了超时时间,避免程序卡死. /** 使用curl方式实现get或post请求 @param $u ...

  10. MXNet源码分析 | KVStore进程内通信

    本文主要基于MXNet1.6.0版本进行分析. MXNet的KVStore模块下有几个比较重要的类.KVStore是一个抽象类,提供了一些通用的API,例如Init.Push和Pull等.因为KVSo ...