模块开发_token的解决方案

TP5.1使用JWT进行Token令牌生成与验证 传统互联网项目在实现保持登录状态、退出登录、接口请求等功能时会使用Session,但是众所周知Session数据在产生后会存储与服务器端,所以当用户量达到一定程度会相应影响到服务器的性能,且Session在前后端分离的项目中或是多服务器项目中的支持不是很好。但是Token不会产生这些问题,服务器端对Token只有生成和验证操作,不会存放数据,针对前后端分离的项目,包括手机APP和当前热门的小程序的... 阅读详情

释意

token是一种特殊的字段
主要作用就是验证身份,可以理解为一种身份证
可以靠这个进入有要求的页面
可以给用户生成
必须是独一无二难以破解

设计思路

放再公共的文件内,通过初始函数调用的方式验证token就可以对全部的请求要求验证token,为了唯一性可以在其中加入时间戳,盐值等进行字段加密。

代码实现

生成token

可以选择在用户登陆的时候生成,然后保存在session中
首先用户登陆,然后后台自动创建一个token值保存给数据库

基础登陆
public function login()
    {
        //测试账号:AccountNumber jack  password myjack
        session_start();//开启session保存
        $webData = new WebData();//实例化
        //拿到数据,保存

        isset($_POST['AccountNumber']) ? $AccountNumber = $_POST['AccountNumber'] : '';
        isset($_POST['password']) ? $password = $_POST['password'] : '';
        //验证数据,不为空,数据字段长度,
        //应该使用Validate验证数据字段

        //数据库匹配账号密码
        $data = db::name('user')->where('account', $AccountNumber)->find();
        if ($data != null) {
            $is_true = password_verify($password, $data['password']);//判断密码是否和散列值匹配,密码在这里的传递过程中需要进行加密
            if ($is_true) {
                $msg['code'] = 200;
                $msg['msg'] = '登陆成功';
                $id = $data['id'];
                $_SESSION['id'] = $id;//用户名已经保存在数据库内
                //生成token,生成规则
                $token = openssl_encrypt($id, 'AES-128-ECB', 245184);
                //openssl_encrypt($data(加密明文), $method(加密方法), $password(加密秘钥), $options(数据格式选项(可选)), $iv(密初始化向量(可选)))
                //将token存入数据库内
                $data['token'] = $token;
            } else {
                $msg['code'] = 400;
                $msg['msg'] = '密码错误';
            }
            print_r($msg);
        }
    }

第二种token存储方法

public function login()
    {
        $this->all_header();
        if ($_SERVER['REQUEST_METHOD'] != 'OPTIONS') {
            isset($_POST['AccountNumber']) ? $AccountNumber = $_POST['AccountNumber'] : '';
            isset($_POST['password']) ? $password = $_POST['password'] : '';
            $data = db::name($this->tableName)->where('account', $AccountNumber)->find();
            if ($data != null) {
                $is_true = password_verify($password, $data['password']);
                if ($is_true) {
                    $userData['userID'] = password_hash($data['id'], PASSWORD_DEFAULT);
                    $userData['nickName'] = $data['nickname'];
                    $userData['legal_person'] = $data['legal_person'];
                    $userData['head_img'] = $data['head_img'];
                    $userData['token'] = $this->createToken($data['id'],$userData['userID']);
                    return json_encode($userData);
                } else {
                    $data = ['msg' => '用户名或密码错误'];
                    return json_encode($data);
                }
            } else {
                $data = ['msg' => '账号不存在'];
                return json_encode($data);
            }
        }
    }

写在公共文件夹下的创建token

//创建token
    public function createToken($id,$ID){
        $webData = new WebData();
        $status = $_SERVER['REQUEST_METHOD'];
        if($status!='OPTIONS'){
            $token = openssl_encrypt($ID, $this->encryptionType, $this->secretKey);
            $thisToken = db::name('user_token')->where('pid', $id)->find();
            $time = date('Y-m-d H:i:s',time());
            $tokenDay = $this->tokenDay;
            if ($thisToken == null) {
                $insertToken['value'] = $token;
                $insertToken['pid'] = $id;
                $insertToken['update_time'] = $time;
                $insertToken['expiration_time'] = date('Y-m-d H-i-s', strtotime("+10 seconds"));
                db::name($this->tokenTable)->insert($insertToken);
                return $token;
            } else {
                        $update['value'] = $token;
                        $update['pid'] = $id;
                        $update['update_time'] = $time;
                        $update['expiration_time'] = date('Y-m-d H-i-s', strtotime("+10 seconds"));
                        db::name($this->tokenTable)->where('pid',$id)->update($update);
                        return $token;
                    }
                }

            }

验证token

//定义token的属性文件
	public $tokenDay = 3;//token有效天数
    public $data = 'http://vytxx.cn';//域名,主要用在拼接文件
    public $encryptionType = 'AES-128-ECB';//token加密类型
    public $secretKey = '245184';//token秘钥
    public $tokenTable = 'user_token';

 //判断token返回代码
public function is_token(){
        $webData = new WebData();
        $status = $_SERVER['REQUEST_METHOD'];
        if($status!='OPTIONS'){
            $token = $_SERVER['HTTP_TOKEN'];
            $is_token = $webData->is_token($token);
            if ($is_token==1){
              return 1;
            }else{
                return json_encode($webData->getTokenError($token));
            }
        }
    }
    //验证token返回代码
    //返回token错误代码
    public function getTokenError($token)
    {

        $code = $this->is_token($token);
        if ($code == 2) {
            $data['code'] = 401;
            $data['token']=$_SERVER['HTTP_TOKEN'];
            $data['msg'] = 'token过期';

        } elseif ($code == 3) {
            $data['code'] = 401;
            $data['msg'] = 'token不存在';
        }
        return $data;
    }

写在公共文件类里面

【API网关】通过定时任务将Token加入Mongo作为缓存 将token加入到Mongodb,每执行一次定时任务就会去刷新一次Token,然后通过数据转换过滤插件对获取Token的时间进行错峰处理,这样就能避免发生Token抢占的问题。业务接口需要在请求头中传入token,通过如果每请求一次业务接口就去调用一次获取Token的接口,负载均衡环境下就会出现两台服务器同时进行并发去调用获取token接口的情况。进入到平台低代码开发模块中,然后进入公共应用、点击JavaBean菜单然后新增一个定时任务的JavaBean。编写相关代码然后保存编译(此处代码可用于参考) 阅读详情

相关推荐

RuoYi 3.8.2登录流程全解析:从验证码生成到JWT Token下发,手把手带你走一遍

本文深入解析RuoYi 3.8.2登录模块的实现细节,从验证码生成到JWT Token下发的完整流程,为开发者提供二次开发的技术参考。涵盖验证码系统、Spring Security定制化认证、JWT生成与校验机制,以及前后端联调的关键数据流,帮助开发者优化登录流程和增强系统安全性。

weixin_42522552的博客 101

ThinkPHP 集成 jwt 技术 token 验证

在app/api/route/route.php路由文件中进行使用,进行使用中间件校验token。因为我这个是多应用,然后我就只在index应用(只提供api接口)下设置了token类。在config/middleware.php中注册中间件。

m0_63622279的博客 4722

单目标跟踪算法及其复现过程---SiamFC(一)

在test.py文件中,就是利用训练出来的模型进行测试,需要更改预训练模型的路径,测试集的路径,以OTB100为例,最后输出的是对每一帧目标位置的坐标点。代码如下:首先需要下载got10k官方库,只需要在终端输入(注意:在终端安装各种库的时候不能使用网络代理),在环境已经配置到的情况下,只需要该其中的路径和就可以运行。这个系列博客仅为了记录各目标跟踪算法的复现(大多为跑通大佬们实现的代码),包括其中出现的很多问题和错误,学到的新知识等等。解决,而且只使用在线的方法,限制了他们可以学习的模型的丰富性。

weixin_58244117的博客 4759

thinkphp6使用jwt完成token生成与校验

这样处理之后,就已经注册了全局中间件了,并且可以在自己建的中间件文件里获取请求方法了,再把全局中的中间件文件里面的注册去掉就可以了。如果在全局中间件文件里注册这个中间件的话(全局中间件文件:app\middleware.php),这样项目里的每一个方法都会走token判断,但是我们不需要登录方法判断token权限,这个时候我就在中间件文件里设置了一个请求方法白名单,凡是在白名单中的请求方法都不会判断token权限。下载完成后会在vendor\firebase下就能看到刚刚下载好的php-jwt了。

xy123boy的博客 1543

10位PWM能否满足电梯±5mm平层精度?4位扩展法让10位PWM达到14位精度

电梯平层精度直接关系乘坐舒适性与安全性,而PWM分辨率是决定精度的关键因素之一。10位PWM能否满足±5mm的平层精度要求?本文从分辨率与物理量的对应关系出发,结合工程精度需求与实战对比,给出明确的选型结论与解决方案,请参考优快云博客《4位扩展法:基于ATtiny816的高精度PWM软件扩展方法》和《低成本高精度PWM:4位扩展法原理、实现和工程实践》。10位PWM的分辨率为 $2^{10} = 1024$ 级。

m0_73354873的博客 243

从零开始:如何用Python建立你的第一个人工智能模型

在这篇文章中,我们将介绍如何从零开始使用Python建立你的第一个人工智能模型。无论你是刚接触编程的新手,还是有经验的开发者想进一步探索人工智能领域,这篇文章都将为你提供清晰、详细的指南。我们将一步步探索数据预处理、模型建立、训练和测试的过程,以及如何解读模型的结果。

Allen1862105的博客 4万+

教你前后端分离使用 Token 登录

这篇文章写一下前后端分离下的登录解决方案,目前大多数都采用请求头携带 Token 的形式。 开写之前先捋一下整理思路: 首次登录时,后端服务器判断用户账号密码正确之后,根据用户id、用户名、定义好的秘钥、过期时间生成 token ,返回给前端; 前端拿到后端返回的 token ,存储在 localStroage 和 Vuex 里; 前端每次路由跳转,判断 localStroage 有无 token ,没有则跳转到登录页,有则请求获取用户信息,改变登录状态; 每次请求接口,在 Axios 请求头里携带 to

weixin_49256908的博客 4590

RTKLIB模糊度固定实战:三种模式对比与部分模糊度固定代码解析

本文深入解析RTKLIB中模糊度固定的三种核心模式(continuous、instantaneous、fix and hold),对比其性能与适用场景,并详细拆解了部分模糊度固定技术的源码实现。通过实战案例与代码级解析,为GNSS高精度定位开发者提供了在不同数据特性下提升固定成功率的优化思路与配置建议。

efc1234567的博客 470

单体项目以及前后端分离项目token验证以及验证流程

单体项目以及前后端分离项目token验证以及验证流程

qq_61935738的博客 1082

Qt6.10 | Qt Bluetooth 蓝牙

本文介绍了QtBluetooth模块的功能和使用方法,包括蓝牙API概述、构建配置(CMake/qmake)、权限管理、平台支持(Linux/macOS特殊处理)、日志设置及许可信息。重点说明Linux平台的后端选择机制,以及macOS上的依赖限制。最后提及蓝牙聊天示例,展示RFCOMM协议通信的实现。全文提供了蓝牙开发的技术要点和注意事项。

Qt历险记,专注Qt技术,三年医疗设备研发经验,1年机器视觉研发经验,半年柔性传感研发经验。 399

零基础学simulink仿真建模--使用Simulink来构建一个混合动力无人机中燃料电池与锂电池协同控制的仿真模型

延长飞行时间:燃料电池的能量密度高于锂电池,适合长时间稳定供电。提高功率密度:锂电池能够快速响应瞬时高功率需求,比如起飞和加速阶段。优化能源管理:通过有效的能量管理系统,可以根据实际需求动态调整燃料电池和锂电池的工作状态,从而提高整体效率。通过上述步骤,我们简要介绍了如何基于Simulink实现混合动力无人机中燃料电池与锂电池协同控制的仿真模型。

amy_mhd的博客 189

【限时免费】 Sa-Token OAuth2模块中redirect_uri校验异常问题解析与解决方案

Sa-Token OAuth2模块中redirect_uri校验异常问题解析与解决方案 【免费下载链接】Sa-Token 一个轻量级 java 权限认证框架,让鉴权变得简单、优雅! —— 登录认证、权限认证、分布式Session会话、微服务网关鉴权、SSO 单点登录、OAuth2.0 统一认证 ...

gitblog_01427的博客 670

【传感器模块项目实战】机器人/无人驾驶常用传感器模型、选型与安装

认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长!无人车&无人机导航合集本文先对机器人/无人驾驶常用传感器模型、选型与安装做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章提示:以下是本篇文章正文内容分为位置式绝对型编码器增量式编码器打比赛的时候用过欧姆龙的增量式编码器,也用过待编码器的步进电机。【防盗标记–盒子君hzj】增量式编码器正交编码输出信号,用于识别正转和反转,通过微控制器(单片机)的片内外设硬件/软件解码(1)惯性器件-机械陀螺。

qq_35635374的博客 446

Nuxt.js Axios模块常见问题解决方案

Nuxt.js Axios模块是一个为Nuxt.js框架提供的安全且易于集成的Axios库。Axios是一个基于Promise的HTTP客户端,用于浏览器和node.js环境。该模块的主要功能包括自动设置基础URL、全局设置认证令牌、支持跨域请求、与Nuxt.js进度条集成等。 该项目主要使用JavaScript和Vue.js作为主要的编程语言和框架。 ## 新手使用注意事项及解决方案 ##

gitblog_00475的博客 1299

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

【限时免费】 Sa-Token与Dubbo3版本兼容性解析

Sa-Token与Dubbo3版本兼容性解析 【免费下载链接】Sa-Token 一个轻量级 java 权限认证框架,让鉴权变得简单、优雅! —— 登录认证、权限认证、分布式Session会话、微服务网关鉴权、SSO 单点登录、OAuth2.0 统一认证 ...

gitblog_01402的博客 297

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

【限时免费】 Sa-Token OAuth2授权码模式跳转问题分析与解决方案

Sa-Token OAuth2授权码模式跳转问题分析与解决方案 【免费下载链接】Sa-Token 一个轻量级 java 权限认证框架,让鉴权变得简单、优雅! —— 登录认证、权限认证、分布式Session会话、微服务网关鉴权、SSO 单点登录、OAuth2.0 统一认证 ...

gitblog_01425的博客 598

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

NestJS JWT 常见问题解决方案

NestJS JWT 是一个基于 JSON Web Tokens (JWT) 的 NestJS 实用工具模块,它基于 `jsonwebtoken` 包开发。该模块主要用于在 NestJS 应用中处理 JWT 的生成和验证,是构建高效且可扩展的服务器端应用程序的重要工具。主要编程语言为 TypeScript。 ## 2. 新手使用时需要注意的三个问题及解决步骤 ### 问题一:如何安装和引入 J

gitblog_00510的博客 607

【Rust问答】跨模块如何共享变量

我有一个cli程序, 我在main函数中拿到用户传递的参数token, 然后我在lib.rs里面的好多函数都要用到这个参数token, 我想通过参数传递的方式好像有点繁琐, 请问各位大佬...

Rust语言学习交流 1240

Sa-Token全方位Java权限认证解决方案:项目的核心功能/场景

Sa-Token全方位Java权限认证解决方案:项目的核心功能/场景 去发现同类优质开源项目:https://gitcode.com/ 在Java开发领域,权限认证一直是开发者关注的焦点问题。今天,我要为大家推荐一款全面、高效的权限认证解决方案——Sa-Token。 项目介绍 Sa-Token是一款功能全面、集成简单的Java权限认证框架。它致力于解决登录认证、权限认证、分布式Session会话、...

gitblog_06749的博客 361

杀疯了!PerfXCloud-AI大模型夏日狂欢来袭,向基石用户赠送 ∞ 亿Token!

平台面向开发人员,提供全流程的大模型训练、微调和推理生产链,助力您快速构建大模型应用服务,实现创新梦想。同时,面向企业需求,我们提供整体解决方案,帮助企业快速构建智能问答、AI员工、代码生成等大模型创新应用,支持快速部署或私有化部署。而对于真正关心大模型推理性能和成本的您,PerfXCloud无疑是您的最佳选择。【十分钟教你编写一个Chatbot本地聊天机器人,node.js环境,Powered by PerfXCloud大模型开发与部署云】我们全方位支持大模型应用生态发展,让大模型人工智能触手可及。

weixin_45571628的博客 1109

实战避坑:企业微信智能机器人 Java 开发常见问题与解决方案

在企业智能协作平台的机器人 Java 开发中,避坑关键在于预防性设计和细致实施。本文列出的问题均源于真实案例,解决方案经过验证。开发者应注重代码健壮性,例如通过限流和异步处理优化性能。持续迭代和测试是保障项目成功的基础。如需进一步讨论,欢迎分享您的实战经验。

tdghjkld的博客 957

RuoYi-Vue-Plus扩展开发终极指南:如何快速构建自定义插件与模块

RuoYi-Vue-Plus作为一款基于Spring Boot 3.5和Vue3的企业级开发框架,其强大的插件化架构和模块化设计让扩展开发变得异常简单。本文将为你详细介绍如何在这款优秀的Java快速开发平台中进行自定义插件与模块集成开发。😊 ## 📦 项目架构概览 RuoYi-Vue-Plus采用先进的**插件化架构设计**,将系统功能解耦为多个独立的模块,这种设计让开发者能够轻松扩展功能

gitblog_00075的博客 788

tgbot故障排除手册:常见问题与解决方案的完整清单

tgbot是一款模块化的Telegram群组管理机器人,能够帮助管理员高效管理群组。本指南将为你提供tgbot常见问题的诊断方法和解决方案,让你快速解决使用过程中遇到的各种技术难题。 ## 一、环境配置问题 ### 1.1 Python版本不兼容 **问题表现**:启动时程序立即退出,日志中出现"Python version of at least 3.6"错误提示。 **解决方案**:

gitblog_01113的博客 951

Jeecg-uniapp移动解决方案:一站式搞定APP、小程序与H5多终端适配

Jeecg-uniapp是一款基于uniapp框架的移动解决方案,能够实现一份代码多终端适配,同时支持APP、小程序和H5。它与JeecgBoot平台完美对接,为开发者提供了高效便捷的移动开发体验。 ### 为什么选择Jeecg-uniapp? 在移动应用开发中,开发者常常面临需要为不同平台开发多个版本的困境,这不仅增加了开发成本,也给后期维护带来了很大麻烦。Jeecg-uniapp的出现,正

gitblog_00386的博客 405

Spring Boot 项目 myblog 整理

myblog项目是一个典型的 Spring Boot 项目,主要包括用户注册、登录、文章管理(创建、查询、更新、删除)等功能。

体系化很难,碎片归纳很简单。 1513
上一篇: tp5和5.1差别之Request::instance();方法
下一篇: 模块开发_php中实现多表查询
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值