代码优化(2)——小程序登录

  1. 验证身份的时候,依赖的是cookie里面的token
    $this->request->server('HTTP_TOKEN',$this->request->request('token', \think\Cookie::get('token')))
    小程序的交互权限验证,一般放到header里面进行鉴权,极少是通过cookie来传递参数验证。可能在开始的时候,在浏览器里面调试,cookie修改比header方便,就使用了cookie来切换身份,并不是一种规范和安全的做法。Token一般放入头部一起发送,身份鉴权类的放入头部,进行统一头部验证,比较方便

2.对于需要验证登录的身份,统一使用init($token) 进行处理,内部用户的相关信息全部被保护在啊 auth对象里面。
导致每次使用初始化登录的user_id  变成使用方法获取。开发者对变量的获取补数量,导致$this->auth->getUserinfo()['id'] 使用这种冗余的方式获取用户user_id,其实只要在api的公共部分,初始化定义一个user_id 然后被赋值,就可以全部使用,同时在auth里面初始化了一次获取用户信息后,直接赋值给全局user_info即可,如果变量不够,只在第一次初始化请求,而不用每次请求之后,再去各个API里面进行对应请求。

技巧与改动: 直接在初始化的时候,获取用户全部相关信息,然后赋值给API公共方法,这样关于该登录的用户的全部数据信息,都是通过user_info变量操作,减少不必要的再次数据请求。一般用户初始化信息之类的,都是只要初始化一次,然后如果中途用户资金之类的数据进行了变动,直接更新全局的数据接口,而不用反复反复在读取的每个方法里面,再去调用。

3.获取参数请求连接的太长,基本获取参数
 $tag = $this->request->post("tagpersonal", ''); 每个参数都要这样进行获取,而且对于一些测试协议支持比较弱,由于头部设置了只接受application/json格式,直接导致postman 提交的非json获取不到,这直接导致开发的时候,每次都要通过修改调试接口的json参数进行调试,复杂度大大提升。开发的时候,需要考虑调试人员的便捷性和自己开发的方便程度。而且没有办法对统一的输入接口,进行日志跟踪。

改进:用一个统一方法获取请求的数组,并赋值给一个变量名,在最后返回结果前,保存到日志里面。统一处理获取的参数,对于早期调试系统帮助非常大,否则出问题,非常麻烦,只能逐步断点或者查看具体原因,而有参数,能很轻松的看到前后结论。需要将参数请求部分,集中统一到一个地方,方便集中处理。

 参数的简化判断,对于多参数的接口非常有帮助,前期其实只要复制对应的方法到系统里面,也可以判断。

4.没有对参数进行统一的过滤和判断,导致只能程序里面反复判断 参数滤空非常重要,可以减少很多无意义的判断。
 

一般参数的请求情况,格式类型(PHP/python等弱语言,能对数字自动转化为字符串操作,或者直接intval即可)然后就是判断是不是空,如果是空,程序无法执行,所以必须过滤空参数的执行。空参数过滤之后,然后就是读取默认参数的默认值,有些代码是需要默认参数执行的。

所以可以写个完整的统一方法来处理参数的,XSS过滤,然后过滤空,然后执行必填参数检测,最后缺值的参数,填充默认参数。大幅度减轻参数的请求工作量,同时可以在该方法上进行相关日志记录。

过滤空参的函数方法

 function  checkNdata($arr,$fillArr=[]) {if(empty($arr)) return false ; //空数组直接退出$arr = array_filter($arr,function ($m) { return $m!='';});//检测字段是否存在if(!empty($fillArr)) {foreach ($fillArr as  $val) {if(!isset($arr[$val]))  return false;}}return $arr;}

PYTHON的实现:

def check_data(arr, fill_arr=None):if not arr:  # 空数组直接退出return False# 使用列表推导式过滤掉空字符串arr = [m for m in arr if m != '']# 检测字段是否存在if fill_arr:for val in fill_arr:if val not in arr:return Falsereturn arr

5.缓存的获取  调整TP5框架里面的快速缓存快速获取方法
\think\Cache::set($decryptSession['session_key'], $decryptSession, 24 * 3600); 这个是基本命令 其实可以直接使用cache的快捷函数 而不用自己另外来操作cache。 所以使用框架之前,需要对文档有个比较熟悉的认识,用里面的快捷方法,比自己构造另外的缓存方法要方便很多。基本上redis已经是当前开发必备,只要直接使用cache即可。
 

6.减少 if  else的嵌套一个小技巧
   代码有N重循环的时候, 如果是遇到错误退出这种 结构
  if(res) {

        xxxxx

     }  else {

      Exit()

     }

  退出报错的情况下,将错误退出的提前,这样就不需要再进行报错逻辑
if(!$res)  exit()
这样有个巨大的好处,可以大幅度减少if() {} else {}的嵌套逻辑。在以前一个案例里面有个四重逻辑
用户微信登录过  系统存在登录手机号  第一种最简单情况,表示用户就是普通登录
用户手机号不存在,但是微信登录过
用户手机号不存在  微信没有登录过
用户手机号存在,微信没有登陆过
直接使用了四层if else
if(微信登录过) {

} else {

  If(手机号存在) {

} else {

直接导致填入四种情况的登录,导致代码800行以上的登录逻辑。其实只要直接做简单判断,不需要if else 然后执行四个对应的条件就可以,大幅度简化执行结构。当前的系统也有这种if else 滥用情况。
 


 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一起来了解深度学习中的“梯度”

文章目录 前言一、什么是梯度?二、梯度计算三、优化算法四、示例五、梯度的作用六、形象化解释七、如果完全不懂公式可以实现这个算法吗?1. 使用 Hugging Face Transformers 实现深度学习任务1) 安装库2) 加载预训练模型和分词器3) 准备数据4) 进行推理5…

LeetCode HOT100(二)双指针

移动0 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0] 解法1:双指针交换 指针L&…

“论基于构件的软件开发方法及其应用”写作框架,软考高级论文,系统架构设计师论文

论文真题 基于构作的软件开发 (Component-Based Software Development,CBSD) 是一种基于分布对象技术、强调通过可复用构件设计与构造软件系统的软件复用途径。基于构件的软件系统中的构件可以是COTS (Commercial-Off-the-Shelf)构件&#x…

Spring Boot轻松整合Minio实现文件上传下载功能

一、Linux 安装Minio 安装 在/root/xxkfz/soft目录下面创建文件minio文件夹,进入minio文件夹,并创建data目录; [rootxxkfz soft]# mkdir minio [rootxxkfz soft]# cd minio [rootxxkfz minio]# mkdir data 执行如下命令进行下载 [rootxx…

Java内存划分详解:从基础到进阶

Java内存划分详解:从基础到进阶 1. 程序计数器(Program Counter Register)2. Java虚拟机栈(Java Virtual Machine Stack)3. 堆(Heap)4. 方法区(Method Area)5. 运行时常量…

DDD架构面试问题

基础概念 什么是领域驱动设计(DDD)? 请解释一下DDD的核心思想和目标。 DDD中的领域(Domain)是什么? 请描述一下领域的概念以及它在软件开发中的重要性。 什么是限界上下文(Bounded Context&am…

ArduPilot开源代码之OpticalFlow_backend

ArduPilot开源代码之OpticalFlow_backend 1. 源由2. Library设计3. 重要例程3.1 OpticalFlow_backend::_update_frontend3.2 OpticalFlow_backend::_applyYaw 4. 总结5. 参考资料 1. 源由 光流计是一种低成本定位传感器,所有的光流计设备传感驱动代码抽象公共部分统…

[计网初识1] TCP/UDP

学习内容 1.TCP建立链接的3次握手,断开连接的4次挥手 2.TCP报文段组成 内容 1.TCP 建立连接的3次握手? 假设主动方是客户端,被动方是服务端。 第一次 客户端给服务端发送 “hello,我是客户端” (TCP段中 SYN1) 第二次 服务端给客户端发送"我接…

从零开始的python学习生活2

接上封装 class Phone:__volt0.5def __keepsinglecore(self):print("让cpu以单核运行")def if5G(self):if self.__volt>1:print("5G通话已开启")else:self.__keepsinglecore()print("电量不足,无法使用5G通话,已经设置为单…

Django项目创建的准备工作【 2 】

【 一 】调整后端目录 #1 目录结构 """ ├── luffy_api├── logs/ # 项目运行时/开发时日志目录 - 包├── manage.py # 脚本文件├── luffy_api/ # 项目主应用,开发时的代码保存 - 包├── apps/ …

【Git基本操作】添加文件 | 修改文件 | 及其各场景下.git目录树的变化

目录 1. 添加文件&add操作和commit操作 2. .git树状目录的变化 3. git其他操作 4. 修改文件 4.1 git status 4.2 git diff 1. 添加文件&add操作和commit操作 add操作:将工作区中所有文件的修改内容 添加进版本库的暂存区中。commit操作:…

云端编码:将您的技术API文档安全存储在iCloud的最佳实践

云端编码:将您的技术API文档安全存储在iCloud的最佳实践 作为一名技术专业人士,管理不断增长的API文档库是一项挑战。iCloud提供了一个无缝的解决方案,允许您在所有设备上存储、同步和访问您的个人技术API文档。本文将指导您如何在iCloud中高…

系统服务综合实验(dns服务,nfs服务)

题目:现有主机 node01 和 node02,完成如下需求: 1、在 node01 主机上提供 DNS 和 WEB 服务 2、dns 服务提供本实验所有主机名解析 3、web服务提供 www.rhce.com 虚拟主机 4…

three-tile: 1. 第一个three-tile程序

上篇介绍了:three-tile: 一个开源的轻量级三维瓦片库-CSDN博客 three-tile 是一个开源的轻量级三维瓦片库,它基于threejs使用typescript开发,提供一个三维地形模型,能轻松给你的应用增加三维瓦片地图。 项目地址&…

C#知识|账号管理系统:UI层-添加账号窗体设计思路及流程。

哈喽,你好啊,我是雷工! 前边练习过详情页窗体的设计思路及流程: 《C#知识|上位机UI设计-详情窗体设计思路及流程(实例)》 本节练习添加账号窗体的UI设计,以下为学习笔记。 01 效果展示 02 添加窗体 在UI层添加Windows窗体,设置名称为:FrmAddAcount.cs 设置窗体属…

Nginx七层(应用层)反向代理:UWSGI代理uwsgi_pass篇

Nginx七层(应用层)反向代理 UWSGI代理uwsgi_pass篇 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite:http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this a…

数据结构模板2

Trie树&#xff1a;用来高效存储和查找字符串集合的数据结构&#xff1a; 模板题&#xff1a;https://www.acwing.com/problem/content/837/ AC代码&#xff1a; #include<bits/stdc.h> using namespace std; int son[100010][26],cnt[100010],idx; char str[100010]; …

数据的洞察力:SQL Server Analysis Services在数据分析中的卓越应用

数据的洞察力&#xff1a;SQL Server Analysis Services在数据分析中的卓越应用 在商业智能和数据分析领域&#xff0c;SQL Server Analysis Services (SSAS) 是一款强大的工具&#xff0c;它提供了多维数据和数据挖掘模型的创建、部署和管理功能。本文将深入探讨如何在SQL Se…

云端生活,智能管理:在iCloud中打造您的个人购物清单与预算计划

云端生活&#xff0c;智能管理&#xff1a;在iCloud中打造您的个人购物清单与预算计划 在快节奏的现代生活中&#xff0c;个人财务管理和购物规划变得尤为重要。iCloud提供了一个强大的平台&#xff0c;让我们能够存储、同步和共享个人购物清单与预算计划。本文将详细介绍如何…

代码随想录算法训练营第二十九天

452. 用最少数量的箭引爆气球 这道题目我原本的想法是只要当前的气球半径范围在已有的箭头能够击穿的气球半径内就可以实现 但是 箭射出去的地方是一个值 而不是一个范围 因此有相同的重叠范围的许多气球并一定都有相同的值&#xff0c;因此这种方法不可取 这题的主要局部最…