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

如何根据运行环境禁用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 08:25:11