我正在尝试为每个用户设置一个Flask API限制器。下面的代码将一个IP地址限制为每分钟3个请求。
from flask_limiter import Limiter
from flask_limiter.util import get_remote_address
limiter = Limiter(
key_func=get_remote_address, #limit by IP Address
storage_uri="redis://localhost:6379",
strategy="moving-window"
)
@api.route('/api/submit-code')
@limiter.limit('3 per minute')
def submit_code():
user_id = session.get("user_id")
if not user_id:
return jsonify({"error": "Unauthorized"}), 401
如何更改此设置以限制用户而不是IP地址?我正在使用服务器会话,所以我不确定如何在限制器装饰器中包含user_id
。
我最终修改了装饰符如下:
@limiter.limit('3 per minute', key_func = lambda : session.get("user_id"))
限制符不适用于未登录的用户。您可以简单地在函数中添加检查,例如OP.