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.mzph.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. 代码详细注释 三、引用到文件,自行取用总结 前言 今天,我们来封装一个业务灵巧的组件,它集成了全局搜索和展示搜…