如何根据运行环境禁用FastAPI中的身份验证功能?
解决方案
方法一:在身份验证依赖中添加环境判断
修改Authorization.py,通过环境变量判断是否跳过验证:
import os from fastapi import Security, HTTPException API_KEY = "你的实际API密钥" # 读取环境变量,默认设为生产环境 ENVIRONMENT = os.getenv("ENVIRONMENT", "production") async def api_key(api_key_header: str = Security(api_key_header_auth)): # 本地/开发环境直接跳过验证 if ENVIRONMENT.lower() in ["development", "localhost", "dev"]: return # 生产环境严格校验API Key if api_key_header != API_KEY: raise HTTPException( status_code=401, detail="Invalid API Key", )
方法二:在路由层面动态控制依赖
修改controller.py,根据环境决定是否注入身份验证依赖:
import os from fastapi import APIRouter, Depends from .Authorization import api_key ENVIRONMENT = os.getenv("ENVIRONMENT", "production") # 仅非本地/开发环境启用身份验证 router_dependencies = [Depends(api_key)] if ENVIRONMENT.lower() not in ["development", "localhost", "dev"] else [] router = APIRouter( prefix="/v2/test", tags=["helloWorld"], dependencies=router_dependencies, responses={404: {"description": "Not found"}}, )
启动时设置环境变量
启动应用时通过环境变量指定运行环境:
- Linux/macOS:
ENVIRONMENT=development uvicorn main:app --reload - Windows CMD:
set ENVIRONMENT=development && uvicorn main:app --reload - Windows PowerShell:
$env:ENVIRONMENT="development"; uvicorn main:app --reload
两种方法对比
- 方法一:所有使用
api_key依赖的路由都会自动应用环境规则,适合全局统一控制。 - 方法二:可以针对单个路由或路由组灵活配置,适合部分路由需要特殊处理的场景。
内容的提问来源于stack exchange,提问作者Waqar ul islam
相关产品推荐
相关产品推荐

