首页 > 解决方案 > FastAPI - CORS 和 slowapi

问题描述

我目前正在使用 fastapi/heroku 和前端 react/netlify 部署一个带有后端的 webapp。最初我有一个使用 CORSMiddleware 解决的 CORS(CORS 标头“Access-Control-Allow-Origin”)问题。

决定研究我的应用程序的速率限制,并通过研究发现slowapi 是最推荐的。然而,问题是当通过他们的文档(https://slowapi.readthedocs.io/en/latest/)实施 slowapi 时,我又再次收到 CORS 错误。

有没有其他人遇到过类似的问题并有解决方法?或者有没有更好的方法来限制我的应用程序。

示例代码:

from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from slowapi import Limiter, _rate_limit_exceeded_handler
from slowapi.util import get_remote_address
from slowapi.errors import RateLimitExceeded

limiter = Limiter(key_func=get_remote_address)
origins = [example_origin]

app = FastAPI()
app.add_middleware(CORSMiddleware, allow_origins=origins)
app.state.limiter = limiter
app.add_exception_handler(RateLimitExceeded, _rate_limit_exceeded_handler)

@app.get("/home")
@limiter.limit("5/minute")
def homepage(request: Request):
    return {"test": "words"}

标签: pythoncorsfastapi

解决方案


更新:通过引入“请求”解决了这个问题,这在 slowapi 文档中没有说明,请求:端点中的请求(包含在文档中)

from fastapi import FastAPI, Request

@app.get("/home")
def homepage(request: Request):
    return {"test": "words"}

推荐阅读