You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为FastAPI中files列表下方的端点配置用户认证?

实现FastAPI端点的认证保护(针对files = []下方的所有端点)

方案一:使用FastAPI原生OAuth2认证

这是通用的原生实现方式,无需额外第三方库依赖:

  1. 导入模块并定义认证依赖
from fastapi import FastAPI, Depends, HTTPException, status
from fastapi.security import OAuth2PasswordBearer

app = FastAPI()

# 指定获取token的登录端点(需自行实现该端点)
oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")

# 自定义token验证逻辑,替换为你的实际业务校验逻辑
async def verify_token(token: str = Depends(oauth2_scheme)):
    # 示例:简单校验token有效性,实际场景可对接数据库、验证JWT签名等
    if not token.startswith("valid-jwt-"):
        raise HTTPException(
            status_code=status.HTTP_401_UNAUTHORIZED,
            detail="无效的认证凭证",
            headers={"WWW-Authenticate": "Bearer"},
        )
    # 验证通过后可返回用户信息,供后续端点使用
    return {"user_id": 1001, "username": "authorized_user"}
  1. 给files = []下方的端点添加认证依赖
files = []

# 受保护的文件列表端点
@app.get("/files")
async def list_files(current_user = Depends(verify_token)):
    return {"files": files, "current_user": current_user}

# 受保护的文件上传端点
@app.post("/files")
async def upload_file(file_info: dict, current_user = Depends(verify_token)):
    files.append(file_info)
    return {"message": "文件已添加", "file": file_info}
  1. 补充实现登录端点(用于生成合法token)
from pydantic import BaseModel

class LoginForm(BaseModel):
    username: str
    password: str

@app.post("/token")
async def login(form_data: LoginForm):
    # 替换为真实的用户名密码校验逻辑
    if form_data.username == "admin" and form_data.password == "admin123":
        return {"access_token": "valid-jwt-xxxxxx", "token_type": "bearer"}
    raise HTTPException(status_code=400, detail="用户名或密码错误")

方案二:修复AuthX模块的配置

如果坚持使用AuthX,检查以下配置是否正确:

  1. 安装并初始化AuthX
from fastapi import FastAPI, Depends
from authx import AuthX, AuthConfig

app = FastAPI()

# 配置AuthX核心参数,替换为你的实际密钥和配置
auth_config = AuthConfig(
    JWT_SECRET_KEY="your-strong-random-secret-key",  # 必填,建议用随机生成的长字符串
    JWT_ALGORITHM="HS256",
    JWT_TOKEN_LOCATION=["headers"],
    JWT_ACCESS_TOKEN_EXPIRE_MINUTES=30
)

# 初始化AuthX实例
auth = AuthX(auth_config)

# 获取认证依赖对象
require_auth = auth.get_auth_route()
  1. 给目标端点添加认证依赖
files = []

@app.get("/files")
async def get_files(user = Depends(require_auth)):
    return {"files": files, "user": user}

@app.post("/files")
async def add_file(file_data: dict, user = Depends(require_auth)):
    files.append(file_data)
    return {"message": "文件添加成功"}
  1. 补充AuthX登录端点
@app.post("/auth/login")
async def login(username: str, password: str):
    # 替换为真实的用户校验逻辑
    if username == "admin" and password == "admin123":
        token = auth.create_access_token(subject={"username": username})
        return {"access_token": token, "token_type": "bearer"}
    raise HTTPException(status_code=401, detail="认证失败")

批量保护端点的技巧

如果files = []下方有大量端点,推荐用APIRouter批量添加依赖,避免重复编写:

from fastapi import APIRouter, Depends

# 创建路由实例并全局绑定认证依赖
file_router = APIRouter(dependencies=[Depends(verify_token)])  # 或Depends(require_auth)

# 挂载所有文件相关端点
@file_router.get("/files")
async def list_files():
    return {"files": files}

@file_router.post("/files")
async def upload_file(file_info: dict):
    files.append(file_info)
    return {"message": "文件已添加"}

# 将路由注册到主应用
app.include_router(file_router)

内容的提问来源于stack exchange,提问作者Pinfox150

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 21:05:05