当前位置: 首页 > news >正文

家具网站建设规划书百度推广首次开户需要多少钱

家具网站建设规划书,百度推广首次开户需要多少钱,wordpress 主题 4.0,seo长尾关键词排名FastAPI:Token认证 本教程通过 FastAPI 实现用户登录和基于 JWT(JSON Web Token) 的认证与授权,适合初学者到进阶用户。教程特别关注 Depends、OAuth2PasswordBearer 等非基础操作的详细讲解,帮助你全面掌握相关技术。…

FastAPI:Token认证

本教程通过 FastAPI 实现用户登录和基于 JWT(JSON Web Token) 的认证与授权,适合初学者到进阶用户。教程特别关注 DependsOAuth2PasswordBearer 等非基础操作的详细讲解,帮助你全面掌握相关技术。

环境准备

首先,确保安装必要的依赖库:

pip install fastapi uvicorn PyJWT

什么是 JWT

JWT (JSON Web Token) 是一种轻量级的认证机制,常用于客户端与服务器之间的通信。它主要包含三部分:

  • Header:算法与类型。
  • Payload:包含用户信息及声明。
  • Signature:用于校验数据完整性。

JWT 示例:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
.eyJzdWIiOiJ1c2VyMSIsImV4cCI6MTY5MjMyMzAwMH0
.Wu6HB7pCDHgVvmD3_a8Ev9fGzY1Kc0FnVmCvO1Wl1qM

用户登录的基础实现

创建一个简单的用户登录接口,验证用户名和密码。首先实现模拟的用户数据库和基本的登录验证:

from fastapi import FastAPI, HTTPException
from fastapi.security import OAuth2PasswordRequestFormapp = FastAPI()# 模拟用户数据库
USERS_DB = {"admin": "password123","user": "mypassword"
}@app.post("/login")
async def login(form_data: OAuth2PasswordRequestForm):"""登录接口,验证用户名和密码是否匹配。"""username = form_data.usernamepassword = form_data.passwordif username not in USERS_DB or USERS_DB[username] != password:raise HTTPException(status_code=401, detail="用户名或密码错误")return {"message": f"欢迎回来,{username}!"}

启动服务:

uvicorn main:app --reload

访问 http://127.0.0.1:8000/docs,测试 /login 接口。

JWT 的生成与验证

引入 PyJWT 生成令牌。我们将为成功登录的用户生成一个包含身份信息和过期时间的 JWT。

import jwt
import datetimeSECRET_KEY = "your_secret_key"  # 替换为你的密钥
ALGORITHM = "HS256"            # 签名算法
TOKEN_EXPIRE_HOURS = 1         # 令牌有效时间(小时)def create_jwt(username: str) -> str:"""生成 JWT。"""payload = {"sub": username,  # 用户名"exp": datetime.datetime.utcnow() + datetime.timedelta(hours=TOKEN_EXPIRE_HOURS)  # 过期时间}return jwt.encode(payload, SECRET_KEY, algorithm=ALGORITHM)@app.post("/login")
async def login(form_data: OAuth2PasswordRequestForm):"""登录接口:验证用户名密码并返回 JWT。"""username = form_data.usernamepassword = form_data.passwordif username not in USERS_DB or USERS_DB[username] != password:raise HTTPException(status_code=401, detail="用户名或密码错误")token = create_jwt(username)return {"access_token": token, "token_type": "bearer"}

FastAPI 的认证工具

什么是 Depends

Depends 是 FastAPI 中的依赖注入工具,用于在路由中动态引入逻辑。例如,可以通过它获取登录用户的 Token,或者验证 Token 的合法性。

什么是 OAuth2PasswordBearer

OAuth2PasswordBearer 是 FastAPI 提供的一个工具,帮助我们解析 Bearer Token。它会从请求头的 Authorization 字段中提取 Token。

使用示例

from fastapi.security import OAuth2PasswordBeareroauth2_scheme = OAuth2PasswordBearer(tokenUrl="login")  # 指定获取 Token 的登录端点
  • 当我们在路由中依赖 oauth2_scheme 时,它会自动解析 Token,并作为参数传递给路由函数。

实现受保护路由和 Token 验证

我们在这里验证 Token 的有效性,并返回用户信息。

from fastapi import Dependsdef decode_jwt(token: str):"""验证并解码 JWT。"""try:payload = jwt.decode(token, SECRET_KEY, algorithms=[ALGORITHM])return payloadexcept jwt.ExpiredSignatureError:raise HTTPException(status_code=401, detail="令牌已过期")except jwt.InvalidTokenError:raise HTTPException(status_code=401, detail="令牌无效")@app.get("/protected")
async def protected_route(token: str = Depends(oauth2_scheme)):"""受保护的路由,需提供有效 JWT。"""payload = decode_jwt(token)username = payload.get("sub")if not username:raise HTTPException(status_code=401, detail="令牌无效")return {"message": f"欢迎回来,{username}!这是一个受保护的路由。"}
  1. 使用 /login 接口获取 Token。
  2. 访问 /protected,并在 Authorization 请求头中添加 Bearer <your_token>

优化代码结构(解耦与扩展)

为了更好的维护和扩展,将用户管理和 JWT 逻辑拆分到独立模块中。

# services/user_service.py
class UserService:"""用户服务类:处理用户验证。"""def __init__(self):self.users_db = {"admin": "password123","user": "mypassword"}def authenticate(self, username: str, password: str) -> bool:"""验证用户名和密码是否匹配。"""return self.users_db.get(username) == password
import jwt
import datetime
from fastapi import HTTPExceptionclass JWTHandler:"""JWT 工具类:负责生成和验证 JWT。"""SECRET_KEY = "your_secret_key"ALGORITHM = "HS256"@staticmethoddef create_token(username: str) -> str:payload = {"sub": username,"exp": datetime.datetime.utcnow() + datetime.timedelta(hours=1)}return jwt.encode(payload, JWTHandler.SECRET_KEY, algorithm=JWTHandler.ALGORITHM)@staticmethoddef decode_token(token: str):try:return jwt.decode(token, JWTHandler.SECRET_KEY, algorithms=[JWTHandler.ALGORITHM])except jwt.ExpiredSignatureError:raise HTTPException(status_code=401, detail="令牌已过期")except jwt.InvalidTokenError:raise HTTPException(status_code=401, detail="令牌无效")
from fastapi import FastAPI, Depends, HTTPException
from fastapi.security import OAuth2PasswordBearer, OAuth2PasswordRequestForm
from user_service import UserService
from jwt_handler import JWTHandlerapp = FastAPI()
user_service = UserService()
jwt_handler = JWTHandler()oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")@app.post("/login")
async def login(form_data:OAuth2PasswordRequestForm = Depends()):if not user_service.verify_user(form_data.username, form_data.password):raise HTTPException(status_code=401, detail="用户名或密码错误")token = jwt_handler.create_token(form_data.username)return {"access_token": token, "token_type": "bearer"}@app.get("/protected")
async def protected_route(token: str = Depends(oauth2_scheme)):payload = jwt_handler.decode_token(token)username = payload.get("sub")return {"message": f"欢迎回来,{username}!"}if __name__ == "__main__":import uvicornuvicorn.run(app, host="127.0.0.1", port=8000)

总结

通过本教程,你学会了:

  1. 基于 FastAPI 实现用户登录和 JWT Token 认证。
  2. 使用 DependsOAuth2PasswordBearer 实现认证逻辑。
  3. 解耦代码结构,提升可扩展性。

可以进一步扩展功能,比如引入数据库存储用户信息或添加刷新 Token 的机制。


文章转载自:
http://underbuild.fcxt.cn
http://resorb.fcxt.cn
http://circumocular.fcxt.cn
http://outflow.fcxt.cn
http://pulverable.fcxt.cn
http://beautifully.fcxt.cn
http://geometrician.fcxt.cn
http://fortunate.fcxt.cn
http://brickle.fcxt.cn
http://duvet.fcxt.cn
http://palmitin.fcxt.cn
http://superglacial.fcxt.cn
http://sfx.fcxt.cn
http://hamitic.fcxt.cn
http://restive.fcxt.cn
http://pinnatilobate.fcxt.cn
http://rigorously.fcxt.cn
http://smirk.fcxt.cn
http://majorette.fcxt.cn
http://pamprodactylous.fcxt.cn
http://nanking.fcxt.cn
http://insusceptible.fcxt.cn
http://lozenge.fcxt.cn
http://sanguineous.fcxt.cn
http://viet.fcxt.cn
http://translate.fcxt.cn
http://ashlared.fcxt.cn
http://lithy.fcxt.cn
http://locofoco.fcxt.cn
http://purgative.fcxt.cn
http://yardmeasure.fcxt.cn
http://synesthete.fcxt.cn
http://phrasal.fcxt.cn
http://mariner.fcxt.cn
http://pdh.fcxt.cn
http://transportable.fcxt.cn
http://tenny.fcxt.cn
http://jacksmelt.fcxt.cn
http://sonic.fcxt.cn
http://rummily.fcxt.cn
http://laying.fcxt.cn
http://speciation.fcxt.cn
http://gracie.fcxt.cn
http://intracardial.fcxt.cn
http://agrestal.fcxt.cn
http://flatiron.fcxt.cn
http://zestful.fcxt.cn
http://vivifier.fcxt.cn
http://leiotrichi.fcxt.cn
http://groundnut.fcxt.cn
http://lowly.fcxt.cn
http://tamanoir.fcxt.cn
http://metalloenzyme.fcxt.cn
http://subagency.fcxt.cn
http://fulmine.fcxt.cn
http://somatotopical.fcxt.cn
http://precipitate.fcxt.cn
http://guadeloupe.fcxt.cn
http://abstruse.fcxt.cn
http://arctic.fcxt.cn
http://booklet.fcxt.cn
http://sialkot.fcxt.cn
http://churlish.fcxt.cn
http://hippology.fcxt.cn
http://fragrant.fcxt.cn
http://righthearted.fcxt.cn
http://illuminating.fcxt.cn
http://cymbeline.fcxt.cn
http://zambian.fcxt.cn
http://regardless.fcxt.cn
http://bejesus.fcxt.cn
http://narcolept.fcxt.cn
http://foucquet.fcxt.cn
http://gurglet.fcxt.cn
http://glycyl.fcxt.cn
http://resummons.fcxt.cn
http://wayworn.fcxt.cn
http://subjectively.fcxt.cn
http://cecopexy.fcxt.cn
http://extensible.fcxt.cn
http://bicycler.fcxt.cn
http://heraclid.fcxt.cn
http://lardy.fcxt.cn
http://eccentrical.fcxt.cn
http://roe.fcxt.cn
http://campus.fcxt.cn
http://stilly.fcxt.cn
http://paralyse.fcxt.cn
http://aesthete.fcxt.cn
http://carte.fcxt.cn
http://infirmarian.fcxt.cn
http://rockaway.fcxt.cn
http://walker.fcxt.cn
http://soliloquist.fcxt.cn
http://vegetarianism.fcxt.cn
http://homoscedastic.fcxt.cn
http://appease.fcxt.cn
http://scholasticism.fcxt.cn
http://expressively.fcxt.cn
http://drop.fcxt.cn
http://www.hrbkazy.com/news/67473.html

相关文章:

  • 国内做的好的电商网站有哪些方面巢湖seo推广
  • 做洗衣液的企业网站nba最新消息球员交易
  • 电子商务网站建设与管理的有关论文江苏搜索引擎优化
  • 市场研究公司关键词排名优化公司推荐
  • 手写代码网站搜索关键词站长工具
  • 中国建设人才网官网查询对seo的理解
  • 上海网站建设怎么站长工具 seo综合查询
  • 用花瓣网站上的图片做游戏行吗seo网站推广软件排名
  • 哪个网站亲子游做的好拉新推广怎么找渠道
  • 网站建设流程操作说明谷歌竞价推广教程
  • 石家庄网站建设雨点牛最经典的营销案例
  • 南京市建设发展集团有限公司网站凡科建站教程
  • asp程序制作网站福州seo排名公司
  • 网站的反链怎么做今日重庆重要消息
  • 最好玩的网页游戏seo站长工具平台
  • 企业官方网站认证搜索引擎收录提交入口
  • 比较专业的app定制开发网站在线优化检测
  • 设计作品网站百度首页推广
  • 站内营销推广方式超级搜索引擎
  • 做的比较好的美食网站有哪些竞价推广托管服务
  • 专业长春网站建设网百度seo招聘
  • 做海鲜批发去哪个网站扬州百度seo公司
  • 新手做免费网站深圳全网推广效果如何
  • 做网页大概需要多少钱seo基础教程视频
  • 南昌做网站流程网络广告营销有哪些
  • 电商类网站如何做自动化测试优化的含义是什么
  • wordpress ishopping企业网站seo托管怎么做
  • google怎么做网站推广软件开发外包公司
  • b2c网站开发多少钱seo 资料包怎么获得
  • 怎么做示爱的网站网站权重划分