代碼優化(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.pswp.cn/web/43456.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/43456.shtml
英文地址,請注明出處:http://en.pswp.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;因此這種方法不可取 這題的主要局部最…