Python fastapi-jwt-auth 模块:完整教程

Python fastapi-jwt-auth 模块

fastapi-jwt-auth 是用于在 FastAPI 应用程序中实现 JSON Web Token(JWT)认证的库。它提供了一种简单而灵活的方式来处理用户身份验证,允许开发者轻松地保护 API 路由。此模块旨在与 FastAPI 一起使用,适用于 Python 3.7 及更高版本。

应用场景

fastapi-jwt-auth 的主要用途是在构建 RESTful API 时提供安全认证机制。它常用于以下场景:

  1. 用户注册与登录:使用 JWT 实现用户身份认证,确保用户的安全性。
  2. 受保护的 API:通过 JWT 验证用户的身份,限制未授权用户访问敏感数据。
  3. 单点登录(SSO):配合其他服务提供无缝的用户认证体验。

安装说明

fastapi-jwt-auth 不是 Python 的默认模块,需要通过 pip 安装。您可以通过以下命令安装:

1
pip install fastapi-jwt-auth

用法举例

示例 1: 用户注册与登录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
from fastapi import FastAPI, Depends
from fastapi.security import OAuth2PasswordBearer, OAuth2PasswordRequestForm
from fastapi_jwt_auth import AuthJWT
from pydantic import BaseModel

app = FastAPI()

# 自定义 JWT 配置
class Settings(BaseModel):
authjwt_secret_key: str = "your_secret_key" # JWT 密钥

@AuthJWT.load_config
def get_config():
return Settings()

# 用户模型
class User(BaseModel):
username: str
password: str

# 模拟用户数据库
fake_users_db = {}

# 用户注册路由
@app.post('/register')
def register(user: User):
fake_users_db[user.username] = user.password # 储存用户信息
return {"msg": "User registered successfully"}

# 用户登录路由
@app.post('/login')
def login(form_data: OAuth2PasswordRequestForm = Depends()):
if form_data.username not in fake_users_db or fake_users_db[form_data.username] != form_data.password:
return {"msg": "Invalid credentials"}

access_token = AuthJWT.create_access_token(subject=form_data.username) # 创建 JWT 令牌
return {"access_token": access_token, "token_type": "bearer"}

示例 2: 受保护的 API

1
2
3
4
5
6
7
8
from fastapi import HTTPException

# 受保护路由
@app.get('/protected')
def protected(Authorize: AuthJWT = Depends()):
Authorize.jwt_required() # 验证 JWT 是否有效
current_user = Authorize.get_jwt_subject() # 获取当前用户
return {"msg": f"Welcome {current_user}!"} # 返回用户信息

示例 3: 令牌刷新

1
2
3
4
5
6
7
# 令牌刷新路由
@app.post('/refresh')
def refresh(Authorize: AuthJWT = Depends()):
Authorize.jwt_refresh_token_required() # 验证刷新令牌
current_user = Authorize.get_jwt_subject() # 获取当前用户
new_access_token = Authorize.create_access_token(subject=current_user) # 创建新的访问令牌
return {"access_token": new_access_token, "token_type": "bearer"} # 返回新令牌

通过以上示例,我们看到了如何使用 fastapi-jwt-auth 模块来实现用户注册、登录、保护 API 接口及刷新令牌等功能。这些功能为开发安全的 FastAPI 应用提供了强大支持。

强烈建议大家关注本人的博客全糖冲击博客,我的博客里包含了所有 Python 标准库的使用教程,方便您查询和学习。这不仅能够帮您快速掌握不同模块的使用方法,还可以了解最新的编程趋势。关注我的博客,您将获得丰富的学习资源,提升自己的编程技能,共同在编程的道路上前进!