Skip to content

Commit f65e9ab

Browse files
authored
Add apis rate limiter (#72)
* Add apis rate limiter * update the limiter storage prefix
1 parent 06a0a33 commit f65e9ab

File tree

4 files changed

+16
-5
lines changed

4 files changed

+16
-5
lines changed

backend/app/api/v1/auth/auth.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
# -*- coding: utf-8 -*-
33
from fastapi import APIRouter, Depends, Request
44
from fastapi.security import OAuth2PasswordRequestForm
5+
from fastapi_limiter.depends import RateLimiter
56

67
from backend.app.common.jwt import DependsUser, get_token, jwt_decode, CurrentJwtAuth
78
from backend.app.common.response.response_schema import response_base
@@ -18,7 +19,12 @@ async def swagger_user_login(form_data: OAuth2PasswordRequestForm = Depends()) -
1819
return SwaggerToken(access_token=token, user=user)
1920

2021

21-
@router.post('/login', summary='用户登录', description='json 格式登录, 仅支持在第三方api工具调试接口, 例如: postman')
22+
@router.post(
23+
'/login',
24+
summary='用户登录',
25+
description='json 格式登录, 仅支持在第三方api工具调试接口, 例如: postman',
26+
dependencies=[Depends(RateLimiter(times=5, minutes=15))],
27+
)
2228
async def user_login(obj: Auth):
2329
access_token, refresh_token, access_expire, refresh_expire, user = await UserService.login(obj)
2430
data = LoginToken(

backend/app/common/casbin_rbac.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313

1414

1515
class RBAC:
16-
1716
@staticmethod
1817
async def get_casbin_enforcer() -> casbin.Enforcer:
1918
"""

backend/app/core/registrar.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from fastapi import FastAPI
66
from fastapi.middleware.cors import CORSMiddleware
77
from fastapi.middleware.gzip import GZipMiddleware
8+
from fastapi_limiter import FastAPILimiter
89
from fastapi_pagination import add_pagination
910

1011
from backend.app.api.routers import v1
@@ -27,15 +28,19 @@ async def register_init(app: FastAPI):
2728
"""
2829
# 创建数据库表
2930
await create_table()
30-
# 连接redis
31+
# 连接 redis
3132
await redis_client.open()
33+
# 初始化 limiter
34+
await FastAPILimiter.init(redis_client, prefix='fba_limiter')
3235
# 启动定时任务
3336
scheduler.start()
3437

3538
yield
3639

37-
# 关闭redis连接
40+
# 关闭 redis 连接
3841
await redis_client.close()
42+
# 关闭 limiter
43+
await FastAPILimiter.close()
3944
# 关闭定时任务
4045
scheduler.shutdown()
4146

requirements.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,16 @@ aioredis==2.0.1
33
aiosmtplib==1.1.6
44
alembic==1.7.4
55
APScheduler==3.8.1
6+
asynccasbin==1.1.8
67
asyncmy==0.2.5
78
bcrypt==3.2.2
8-
asynccasbin==1.1.8
99
casbin_async_sqlalchemy_adapter==1.1.0
1010
cryptography==39.0.1
1111
email-validator==1.1.3
1212
Faker==9.7.1
1313
fast-captcha==0.1.3
1414
fastapi==0.95.2
15+
fastapi-limiter==0.1.5
1516
fastapi-pagination==0.12.1
1617
gunicorn==20.1.0
1718
httpx==0.23.0

0 commit comments

Comments
 (0)