使用中间件(拦截器)
标准做法
# 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)
`