FastAPI-Cookie

fastapi-learning-notes/codes/ch01/main.py at master · Relph1119/fastapi-learning-notes · GitHub

1、Cookie的作用

Cookie可以充當用戶認證的令牌,使得用戶在首次登錄后無需每次手動輸入用戶名和密碼,即可訪問受限資源,直到Cookie過期或被手動清除。

2、查找Cookie

Google Chrome:

  1. 打開Chrome瀏覽器。
  2. 右上角點擊三個點形成的菜單圖標,選擇“更多工具” > “開發者工具”(也可以直接按F12或Ctrl+Shift+I快捷鍵)。
  3. 在開發者工具窗口中,點擊頂部的“Application”選項卡。
  4. 在左側導航欄,展開“Cookies”部分,選擇您想查看的網站域名。


?3、Cookie代碼

下面這段代碼使用FastAPI框架實現了一個簡單的用戶登錄和用Cookie進行用戶認證

  • 首先定義了一個User模型類,用于表示用戶信息。
  • 創建了一個模擬的用戶數據庫fake_users_db,其中包含5個用戶及其密碼。
  • 定義了一個active_tokens字典,用于存儲有效的會話令牌及其對應的用戶名。
  • get_current_user函數用于驗證Cookie中的會話令牌是否有效。如果有效,則返回對應的用戶名;否則拋出HTTPException,表示無效的會話令牌。
  • login路由處理函數用于處理用戶登錄請求。首先驗證用戶憑據是否正確,如果正確,則生成一個隨機的會話令牌,并將其與用戶名關聯起來,存儲在active_tokens中。然后將該令牌設置為Cookie,并返回登錄成功的信息以及相關數據。
  • protected_route路由處理函數是一個受保護的路由,只有攜帶有效會話令牌的請求才能訪問。該函數依賴于get_current_user函數來驗證用戶身份,并返回歡迎信息。

最后,在主函數中使用uvicorn啟動FastAPI應用程序。根據不同的模式,可以選擇線上模式或調試模式運行

import secrets
import uvicorn
from fastapi import FastAPI, Depends, Cookie, HTTPException, Response
from pydantic import BaseModelapp = FastAPI()# 用戶模型
class User(BaseModel):username: strpassword: str# 模擬的用戶數據庫,現在包含5個用戶
fake_users_db = {"john_doe": {"username": "john_doe", "password": "secret_john"},"jane_smith": {"username": "jane_smith", "password": "secret_jane"},"alice": {"username": "alice", "password": "secret_alice"},"bob": {"username": "bob", "password": "secret_bob"},"charlie": {"username": "charlie", "password": "secret_charlie"}
}# 假設這是存儲token與其對應用戶的簡單字典
active_tokens = {}def get_current_user(session_token: str = Cookie(None)):"""驗證Cookie中的session_token是否有效,這里是簡化的版本,實際應用中應該有更安全的驗證機制。"""user = active_tokens.get(session_token)if user is not None:return userelse:raise HTTPException(status_code=401, detail="Invalid session token")@app.post("/login")
async def login(response: Response, user: User):if user.username in fake_users_db and user.password == fake_users_db[user.username]["password"]:token = secrets.token_hex(16)active_tokens[token] = user.username  # 將生成的token與用戶名關聯起來print("active_tokens:", active_tokens)response.set_cookie(key="session_token", value=token, max_age=60 * 60 * 24)return {"username": user.username,"password": user.password,"token": token,"active_tokens": active_tokens,"message": f"Login successful for user {user.username}"}else:raise HTTPException(status_code=401, detail="Incorrect username or password")@app.get("/protected-route")
async def protected_route(user: str = Depends(get_current_user)):"""受保護的路由,只有攜帶有效Cookie的請求才能訪問"""return {"message": f"Welcome back, {user}!"}# 主函數,用于啟動FastAPI應用程序
if __name__ == "__main__":## 線上模式# uvicorn.run("abr_server:app", host="0.0.0.0", port = 1218)## debug 模式uvicorn.run("test5:app", host="0.0.0.0", port=1220, reload=True)

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

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

相關文章

《PyTorch計算機視覺實戰》:一、二章

目錄 第一章:人工神經網絡基礎 比較人工智能和傳統機器學習 人工神經網絡(Artificial Neural Network,ANN) 是一種受人類大腦運作方式啟發而構建的監督學習算法。神經網絡與人類大腦中神經元連接和激活的方式比較類似&#xff0…

mysql查看用戶的過期時間

1. mysql查看用戶的過期時間的方法 在MySQL中,用戶的過期時間(也稱為賬戶過期日期)是一個可選項,用于確定某個MySQL用戶賬戶何時到期。但是,值得注意的是,并非所有的MySQL安裝或版本都支持直接設置用戶賬戶…

GoLang語言

基礎 安裝Go擴展 go build 在項目目錄下執行go build go run 像執行腳本文件一樣執行Go代碼 go install go install分為兩步: 1、 先編譯得到一個可執行文件 2、將可執行文件拷貝到GOPATH/bin Go 命令 go build :編譯Go程序 go build -o "xx.exe"…

CSS元素之間的空白問題:原因與解決方案

在網頁設計中,CSS元素之間的空白是一個常見但往往不易察覺的問題。空白不僅影響布局的準確性,還可能破壞設計的整體美感。本文將探討元素之間空白的產生原因,并提供有效的解決方案。 空白產生的根源 空白問題主要發生在行內元素和行內塊元素…

4.x86游戲實戰-人物狀態標志位

免責聲明:內容僅供學習參考,請合法利用知識,禁止進行違法犯罪活動! 本次游戲沒法給 內容參考于:微塵網絡安全 上一個內容:3.x86游戲實戰-寄存器 人物狀態標志位: 什么叫人物狀態標志位&…

力扣刷題--3168. 候診室中的最少椅子數【簡單】

題目描述 給你一個字符串 s,模擬每秒鐘的事件 i: 如果 s[i] ‘E’,表示有一位顧客進入候診室并占用一把椅子。 如果 s[i] ‘L’,表示有一位顧客離開候診室,從而釋放一把椅子。 返回保證每位進入候診室的顧客都能有…

Leetcode[反轉鏈表]

LCR 024. 反轉鏈表 給定單鏈表的頭節點 head ,請反轉鏈表,并返回反轉后的鏈表的頭節點。 示例 1: 輸入:head [1,2,3,4,5] 輸出:[5,4,3,2,1]示例 2: 輸入:head [1,2] 輸出:[2,1]示…

Go使用Gin框架開發的Web程序部署在Linux時,無法綁定監聽Ipv4端口

最近有寫一部分go語言開發的程序,在部署程序時發現,程序在啟動后并沒有綁定ipv4的端口,而是直接監聽綁定ipv6的端口。 當我用netstat -antup | grep 3601查找我的gin服務啟動的端口占用情況的時候發現,我的服務直接綁定了tcp6 &a…

240629_昇思學習打卡-Day11-Vision Transformer中的self-Attention

240629_昇思學習打卡-Day11-Transformer中的self-Attention 根據昇思課程順序來看呢,今兒應該看Vision Transformer圖像分類這里了,但是大概看了一下官方api,發現我還是太笨了,看不太明白。正巧昨天學SSD的時候不是參考了太陽花的…

LeetCode.30 串聯所有單詞的子串

問題描述 給定一個字符串 s 和一個字符串數組 words。 words 中所有字符串 長度相同。 s 中的 串聯子串 是指一個包含 words 中所有字符串以任意順序排列連接起來的子串。 例如,如果 words ["ab","cd","ef"], 那么 &q…

MySQL Workbench支持哪些數據庫版本的連接?

MySQL Workbench支持哪些數據庫版本的連接? MySQL Workbench 是一款強大的數據庫管理和設計工具,它支持連接多種版本的 MySQL 數據庫。包括但不限于: MySQL 官方發行的所有版本,從 MySQL 5.0 到最新的 MySQL 8.x 和更高版本。 M…

Linux - 札記 - W10: Warning: Changing a readonly file

Linux - 札記 - W10: Warning: Changing a readonly file 這里寫目錄標題 一、問題描述1. 現象2. 原因 二、解決方案 一、問題描述 1. 現象 在使用 vim 編輯文件時(我這里是要編輯 /root/.ssh/authorized_keys)提示:W10: Warning: Changing…

【論文+代碼|已完結】基于人工智能的圖像識別技術在醫療診斷中的應用

基于人工智能的圖像識別技術在醫療診斷中的應用 摘要:隨著人工智能技術的飛速發展,圖像識別技術在醫療領域的應用日益廣泛。本畢業設計旨在研究基于人工智能的圖像識別技術在醫療診斷中的應用,通過對大量醫療圖像數據的分析和處理&#xff0…

IOS Swift 從入門到精通:ios 連接數據庫 安裝 Firebase 和 Firestore

創建 Firebase 項目 導航到Firebase 控制臺并創建一個新項目。為項目指定任意名稱。 在這里插入圖片描述 下一步,啟用 Google Analytics,因為我們稍后會用到它來發送推送通知。 在這里插入圖片描述 在下一個屏幕上,選擇您的 Google Analytics 帳戶(如果已創建)。如果沒…

<電力行業> - 《第7課:發電》

1 發電的原理 電力生產的發電環節是利用電能生產設備將各種一次能源或其他形式的能轉換為電能。生產電能的主要方式有火力發電、水力發電、核能發電、地熱發電、風力發電、太陽能發電、潮汐能發電、生物智能發電和燃料電池發電等。 除太陽能發電的光伏電池技術和燃料電池發電…

c++ 子類繼承父類

這個是子類繼承父類 是否重寫從父類那里繼承來的函數 這個例子的路徑 E盤 demo文件夾 fatherChildfunc

藍卓出席“2024C?O大會”,探討智能工廠建設新路徑

6月29日,“2024C?O大會”在金華成功舉辦。此次大會由浙江省企業信息化促進會主辦,與以往CIO峰會不同,“C?O”代表了企業數字化中的核心決策者群體,包括傳統的CIO、CEO、CDO等。 本次大會圍繞C?O、AIGC與制造業、數據價值、未來…

統計信號處理基礎 習題解答11-9

一個飛行器開始于一個未知位置(, ),按照 以常速運動,其中, 分別是飛行器在x、y方向的速度分量,都是未知的。我們希望估計每一時刻, 飛行器的位置和速度。盡管初始位置(, )和速度, 都是未知的,但是它們可以看成一個隨機矢量。證明能夠由MMSE估計器估計為 …

libarclite_iphonesimulator.a‘; try increasing the minimum deployment target

1. Xcode 15 編譯出現以下錯誤 clang: error: SDK does not contain libarclite at the path /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/arc/libarclite_iphonesimulator.a; try increasing the minimum deployment ta…

React+TS前臺項目實戰(二十一)-- Search業務組件封裝實現全局搜索

文章目錄 前言一、Search組件封裝1. 效果展示2. 功能分析3. 代碼詳細注釋4. 使用方式 二、搜索結果展示組件封裝1. 功能分析2. 代碼詳細注釋 三、引用到文件,自行取用總結 前言 今天,我們來封裝一個業務靈巧的組件,它集成了全局搜索和展示搜…