跳转到主要内容

使用中间件(拦截器)

标准做法
# 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)
`