代码示例

使用 Throttle 中间件
// 在路由中使用 Throttle 中间件 Route::post('api/send', 'Controller/send') ->middleware(\app\admin\middleware\Throttle::class); // 带自定义参数 Route::post('user/login', 'User/login') ->middleware(\app\admin\middleware\Throttle::class, 'login:8,600'); // 参数格式: '策略名:最大次数,窗口秒数'
登录失败时累加计数
use app\admin\middleware\Throttle; // 在登录失败后调用 Throttle::failHit($request); // 会自动累加 Cache 计数器 // 超限后中间件会返回 429

限流说明

登录限流配置

最大尝试次数: 8 次

时间窗口: 600 秒 (10 分钟)

限制方式: IP + 用户名 组合

限流 Key 格式

login_throttle_{md5(ip|username)}

实现方式

1. 使用 ThinkPHP Cache 存储尝试次数

2. 登录成功后清除计数

3. 超过限制后返回错误信息