驗證碼與登錄過程邏輯學習總結

目錄

前言

一、驗證碼與登錄

二、使用步驟

1.先apipost測試一波

2.先搞驗證碼

3.跨域問題

4.后端走起

總結


前言

近期要做一個比較完整的demo,需要自己做一個前端登錄頁面,不過api接口都是現成的,一開始以為過程會很easy,但是由于跨域問題、后端代理、驗證碼關聯登問題,還是小小折騰一些,正好將過程記錄下。


一、驗證碼與登錄

現代網站為了系統的安全性以及降低惡意攻擊,一般都會在用戶名、密碼驗證的基礎上,增加驗證碼驗證。

這里主要就涉及驗證碼關聯問題,即怎么讓后端知道后端生成的驗證碼就是對應我前端輸入的驗證碼?以下我們就來一步步講解。包括驗證碼、cookie、登錄邏輯登

二、使用步驟

1.先apipost測試一波

通過apipost先把涉及的兩個接口調用通了,然后再寫代碼。

測試發現,調用這兩個接口的時候,都給傳遞同一個cookie即可成功登錄。

那么,我寫代碼的時候,也生成一個cookie,給這兩個接口傳遞同一個cookie應該就可以了。

2.先搞驗證碼

<div class="mb-6"><label for="captcha" class="block text-gray-700 text-sm font-bold mb-2">驗證碼</label><div class="flex gap-2"><input type="text" id="captcha" class="shadow appearance-none border rounded w-full py-2 px-3 text-gray-700 leading-tight focus:outline-none focus:shadow-outline" required><img id="captchaImage" alt="驗證碼" class="h-10 cursor-pointer" onclick="refreshCaptcha()"></div>
</div><script>// 刷新驗證碼async function refreshCaptcha() {const captchaImage = document.getElementById('captchaImage');const url = `http://xx.com/api/captcha?t=${Date.now()}`;captchaImage.src = url;}// 頁面加載時刷新驗證碼window.onload = refreshCaptcha;</script>

3.跨域問題

由于原有接口的安全性設置,進行了CORS跨域設置,導致前端無法直接請求。

另外,出于安全考慮,前端也無法手動給后端傳遞cookie,正常過程是后端給前端返回cookie,然后后續調用后端接口會自動傳遞當前域下的cookie。

這里通過apipost工具、后端寫代碼都沒問題,主要是對瀏覽器請求做了限制,準確說是瀏覽器的一種安全機制。

在不能調整原有接口的CORS設置的情況,那就只能自己寫后端代理接口,那么關鍵就是讓后端可以成功調用,那么問題基本就解決了。

4.后端走起

后端實現生成驗證碼是很順利,但是在登錄邏輯這里發現前面說的“給這兩個接口傳遞相同的cookie”的假設無法成功登錄。

再次F12看原系統登錄請求,發現獲取驗證碼的接口會返回cookie,然后登錄的時候傳遞了這個cookie。之前一直沒注意到,是當前問AI的時候,AI跟我說的是獲取驗證碼會通過Set_Cookie返回cookie,實際直接就是cookie,而且還不是每次請求都會返回,可能本地有了就不返回?

按照最新思路,重新調整邏輯:

1)獲取驗證碼,獲取到cookie;設置到前端

2)登錄邏輯,自動傳遞到后端,后端再把這個cookie傳遞給實際登錄接口。

ok搞定。

@app.get("/captcha")
async def get_captcha(request: Request):target_url = f"{KAPTCHA_URL}?t={int(time.time()*1000)}"try:resp = requests.get(target_url, stream=True)cookie_val= resp.cookies["cookie_key"]response = StreamingResponse(resp.iter_content(chunk_size=64), media_type=resp.headers["Content-Type"])# 開發環境臨時禁用Secureresponse.set_cookie(key="cookie_key",value=cookie_val,httponly=True,samesite="Lax",  # 開發環境使用Laxsecure=False,  # 開發環境禁用Securepath="/",)return responseexcept Exception as e:return JSONResponse(content={"error": str(e)}, status_code=500)@app.post("/user/login")
async def proxy_login(request: Request):# 獲取 form-dataform_data = await request.form()# 單獨獲取某個字段login_id = form_data.get("loginId")password = form_data.get("password")kaptcha_code = form_data.get("kaptchaCode")cookies = request.cookiescookie_val = cookies.get("cookie_key")try:response = login(login_id, password, kaptcha_code, cookie_val)return JSONResponse(content=response.json(), status_code=response.status_code)except requests.RequestException as e:return JSONResponse(content={"errCode": ErrCode.FAILURE.value,"errMsg": str(e),"data": {}},status_code=500,)


總結

以上就是今天要講的內容,本文主要介紹了自己寫前端集成已有驗證碼、登錄接口過程中遇到的問題以及如何解決,希望可以幫助到大家。

本文重點總結:

1)前端安全性考慮,前端無法跨域訪問后端接口,無法直接給后端傳遞cookie。調用后端接口的時候,會默認把當前域下cookie傳遞到后端

2)驗證碼與登錄邏輯,驗證碼接口會返回一個cookie,調用登錄接口的時候傳遞這個cookie,實現前后端同一個驗證碼的關聯驗證

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/80234.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/80234.shtml
英文地址,請注明出處:http://en.pswp.cn/web/80234.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

軌道炮--范圍得遍歷,map巧統計

1.思路很難想&#xff0c;但代碼一看一下就明白了&#xff0c;就是模擬時間&#xff0c;map存起來遍歷也不受10*6影響 2.每次先統計點對應的直線&#xff0c;再動這個點&#xff0c;map一遍歷實時更新ma統計max&#xff0c;AC!!!! https://www.luogu.com.cn/problem/P8695 #i…

Vue 3.5 新特性深度解析:全面升級的開發體驗

Vue 3.5 新特性深度解析&#xff1a;全面升級的開發體驗 前言 隨著Vue 3.5的正式發布&#xff0c;這個漸進式JavaScript框架再次帶來了令人興奮的改進。本文將深入剖析Vue 3.5的核心更新&#xff0c;幫助開發者快速掌握新特性并應用于實際項目。 ? 核心新特性 1. 增強的響應…

質量管理工程師面試總結

今天閑著無聊參加了學校招聘會的一家雙選會企業&#xff0c;以下是面試的過程。 此次面試采用的是一對多的形式。&#xff08;此次三個求職者&#xff0c;一個面試官&#xff09; 面試官&#xff1a;開始你們每個人先做個自我介紹吧。 哈哈哈哈哈哈哈哈&#xff0c;其實我們…

c++ std庫中的文件操作學習筆記

1. 概述 C標準庫提供了 頭文件中的幾個類來進行文件操作&#xff0c;這些類封裝了底層的文件操作&#xff0c;提供了面向對象和類型安全的接口&#xff0c;使得文件讀寫更加便捷和高效。主要的文件流類包括&#xff1a; std::ifstream&#xff1a;用于從文件中讀取數據。 st…

【網絡安全】SQL注入

如果文章不足還請各位師傅批評指正&#xff01; 想象一下&#xff0c;你經營著一家咖啡店&#xff0c;顧客可以通過店內的點單系統下單。這個系統會根據顧客的輸入&#xff0c;向后廚發送指令&#xff0c;比如“為顧客A準備一杯拿鐵”。 然而&#xff0c;如果有個不懷好意的顧客…

解決Mawell1.29.2啟動SQLException: You have an error in your SQL syntax問題

問題背景 此前在openEuler24.03 LTS環境下的Hive使用了MySQL8.4.2&#xff0c;在此環境下再安裝并啟動Maxwell1.29.2時出現如下問題 [ERROR] Maxwell: SQLException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version f…

Oracle APEX IR報表列寬調整

目錄 1. 問題&#xff1a;如何調整Oracle APEX IR報表列寬 2. 解決辦法 1. 問題&#xff1a;如何調整Oracle APEX IR報表列寬 1-1. 防止因標題長而數據短&#xff0c;導致標題行的文字都立起來了&#xff0c;不好看。 1-2. 防止因數據太長而且中間還沒有空格&#xff0c;把列…

pytorch 14.3 Batch Normalization綜合調參實踐

文章目錄 一、Batch Normalization與Batch_size綜合調參二、復雜模型上的Batch_normalization表現1、BN對復雜模型&#xff08;sigmoid&#xff09;的影響2、模型復雜度對模型效果的影響3、BN對復雜模型&#xff08;tanh&#xff09;的影響 三、包含BN層的神經網絡的學習率優化…

Model.eval() 與 torch.no_grad() PyTorch 中的區別與應用

Model.eval() 與 torch.no_grad(): PyTorch 中的區別與應用 在 PyTorch 深度學習框架中&#xff0c;model.eval() 和 torch.no_grad() 是兩個在模型推理&#xff08;inference&#xff09;階段經常用到的函數&#xff0c;它們各自有著獨特的功能和應用場景。本文將詳細解析這兩…

Swagger go中文版本手冊

Swaggo(github.com/swaggo/swag)的注解語法是基于 OpenAPI 2.0 (以前稱為 Swagger 2.0) 規范的,并添加了一些自己的約定。 主要官方文檔: swaggo/swag GitHub 倉庫: 這是最權威的來源。 鏈接: https://github.com/swaggo/swag重點關注: README.md: 包含了基本的安裝、使用…

物聯網設備遠程管理:基于代理IP的安全固件更新通道方案

在物聯網設備遠程管理中&#xff0c;固件更新的安全性直接關系到設備功能穩定性和系統抗攻擊能力。結合代理IP技術與安全協議設計&#xff0c;可構建安全、高效的固件更新通道。 一、代理IP在固件更新中的核心作用 網絡層隱匿與路由優化 隱藏更新源服務器&#xff1a;通過代理I…

【C++重載操作符與轉換】句柄類與繼承

目錄 一、句柄類的基本概念 1.1 什么是句柄類 1.2 句柄類的設計動機 1.3 句柄類的基本結構 二、句柄類的實現方式 2.1 基于指針的句柄類 2.2 值語義的句柄類 2.3 引用計數的句柄類 三、句柄類與繼承的結合應用 3.1 實現多態容器 3.2 實現插件系統 3.3 實現狀態模式…

谷歌曾經的開放重定向漏洞(如今已經修復) -- noogle DefCamp 2024

題目描述: 上周&#xff0c;我決定創建自己的搜索引擎。這有點難&#xff0c;所以我背上了另一個。我也在8000端口上嘗試了一些東西。 未發現題目任何交互,但是存在一個加密js const _0x43a57f _0x22f9; (function(_0x3d7d57, _0x426e05) {const _0x16c3fa _0x22f9, _0x3187…

【C#】ToArray的使用

在 C# 中&#xff0c;ToArray 方法通常用于將實現了 IEnumerable<T> 接口的集合&#xff08;如 List<T>&#xff09;轉換為數組。這個方法是 LINQ 提供的一個擴展方法&#xff0c;位于 System.Linq 命名空間中。因此&#xff0c;在使用 ToArray 方法之前&#xff0…

資產管理平臺—chemex

1、簡介 Chemex CMDB&#xff08;Configuration Management Database&#xff09;是一個基于現代微服務架構的資產管理與自動化平臺&#xff0c;專為 IT 基礎設施與業務資產管理而設計。其核心目標是解決大規模系統運維中資產信息混亂、配置分散、數據不一致等問題&#xff0c…

【AI】mcp server是什么玩意兒

文章目錄 背景mcp server的必要性mcp server的基本概念mcp server的架構與核心組件總結 背景 劈里啪啦的整了一堆概念&#xff0c;對mcp server還是只停留在知道個詞的地步。 雖然目前大模型的對話生成能力很強&#xff0c;但是大模型&#xff08;如deepseek&#xff09;并不能…

c# 數據結構 樹篇 入門樹與二叉樹的一切

事先聲明,本文不適合對數據結構完全不懂的小白 請至少學會鏈表再閱讀 c# 數據結構 鏈表篇 有關單鏈表的一切_c# 鏈表-CSDN博客 數據結構理論先導:《數據結構&#xff08;C 語言描述&#xff09;》也許是全站最良心最通俗易懂最好看的數據結構課&#xff08;最遲每周五更新~~&am…

《Cookie Cutter》中2000多張精靈表與10000個2D光源的管理之道

一個小團隊如何在多個平臺上以優秀的效果展示手繪動畫&#xff1f;Subcult Joint 工作室給出了答案。他們用六年時間開發出了游戲《Cookie Cutter》。游戲中使用了數千個使用傳統動畫技術制作的高分辨率資產&#xff0c;而且這些資產都在 Unity 中進行了優化。由于工作室需要在…

什么是實景VR?實景VR應用場景

實景VR&#xff0c;即基于真實場景的虛擬現實技術&#xff0c;是利用計算機技術生成三維環境&#xff0c;以模擬并再現真實世界場景的技術。 用戶通過佩戴VR設備&#xff08;如VR頭盔、手柄等&#xff09;或通過電腦設備&#xff0c;可以沉浸在一個高度仿真的虛擬環境中&#…

內核性能測試(60s不丟包性能)

以xGAP-200-SE7K-L&#xff08;雙口10G&#xff09;在飛騰D2000上為例&#xff08;單通道最高性能約2.8Gbps) 單口測試 0口&#xff1a; tcp&#xff1a; taskset -c 4 iperf -c 1.1.1.1 -i 1 -t 60 -p 60001 taskset -c 4 iperf -s -i 1 -p 60001 udp&#xff1a; taskse…