使用中间件（拦截器）

标准做法
# LoginMiddleware.py

from fastapi import Request,status
from starlette.middleware.base import BaseHTTPMiddleware
from fastapi.responses import JSONResponse

WHITE_LIST={
 "/",
 "/docs",
 "/health"
}

# 需要登陆中间件
class LoginMiddleware(BaseHTTPMiddleware):
 async def dispatch(self,request: Request, call_next):
 token = request.headers.get("token", "")
 if request.url.path in (WHITE_LIST):
 return await call_next(request)
 if not token:
 return JSONResponse(
 status_code=status.HTTP_401_UNAUTHORIZED,
 content={"code": 401, "message": "Missing or invalid token"}
 )

 response = await call_next(request)
 return response

# 中间件示例
class XPowerByMiddleware(BaseHTTPMiddleware):
 async def dispatch(self,request: Request, call_next):
 response = await call_next(request)
 response.headers["x-powered-by"]="iovhm-com © 2022"
 return response

# main.py

from LoginMiddleware import LoginMiddleware,XPowerByMiddleware

app.add_middleware(LoginMiddleware)
app.add_middleware(XPowerByMiddleware)
`

