Refactor the interface rate limiter implementation (#1072)

* Refactor the interface rate limiter implementation

* Update deps
This commit is contained in:
Wu Clan
2026-02-11 17:27:46 +08:00
committed by GitHub
parent 3f06baffed
commit 966779bcd7
10 changed files with 472 additions and 406 deletions
+3 -2
View File
@@ -2,7 +2,7 @@ from typing import Annotated
from fastapi import APIRouter, Depends, Request, Response
from fastapi.security import HTTPBasicCredentials
from fastapi_limiter.depends import RateLimiter
from pyrate_limiter import Duration, Rate
from starlette.background import BackgroundTasks
from backend.app.admin.schema.token import GetLoginToken, GetNewToken, GetSwaggerToken
@@ -11,6 +11,7 @@ from backend.app.admin.service.auth_service import auth_service
from backend.common.response.response_schema import ResponseModel, ResponseSchemaModel, response_base
from backend.common.security.jwt import DependsJwtAuth
from backend.database.db import CurrentSession, CurrentSessionTransaction
from backend.utils.limiter import RateLimiter
router = APIRouter()
@@ -27,7 +28,7 @@ async def login_swagger(
'/login',
summary='用户登录',
description='json 格式登录, 仅支持在第三方api工具调试, 例如: postman',
dependencies=[Depends(RateLimiter(times=5, minutes=1))],
dependencies=[Depends(RateLimiter(Rate(5, Duration.MINUTE)))],
)
async def login(
db: CurrentSessionTransaction,
+3 -2
View File
@@ -2,7 +2,7 @@ import uuid
from fast_captcha import img_captcha
from fastapi import APIRouter, Depends
from fastapi_limiter.depends import RateLimiter
from pyrate_limiter import Duration, Rate
from starlette.concurrency import run_in_threadpool
from backend.app.admin.schema.captcha import GetCaptchaDetail
@@ -11,6 +11,7 @@ from backend.core.conf import settings
from backend.database.db import CurrentSession
from backend.database.redis import redis_client
from backend.utils.dynamic_config import load_login_config
from backend.utils.limiter import RateLimiter
router = APIRouter()
@@ -18,7 +19,7 @@ router = APIRouter()
@router.get(
'/captcha',
summary='获取登录验证码',
dependencies=[Depends(RateLimiter(times=5, seconds=10))],
dependencies=[Depends(RateLimiter(Rate(5, Duration.SECOND * 30)))],
)
async def get_captcha(db: CurrentSession) -> ResponseSchemaModel[GetCaptchaDetail]:
await load_login_config(db)