如何为带参数的Laravel路由按不同IP针对每个ID做限流?
解决Laravel Throttle路由参数ID独立限流问题
当前你的限流规则仅基于用户ID或IP生成标识,没有将路由参数{id}纳入区分条件,导致不同ID的路由共享同一个限流计数器。要实现每个ID独立限流,只需在限流标识中拼接路由参数即可。
修改RouteServiceProvider.php中的限流配置:
RateLimiter::for('visit', function (Request $request) { // 拼接用户/IP与路由ID作为唯一限流标识 $limitKey = $request->user() ? $request->user()->id . '_' . $request->route('id') : $request->ip() . '_' . $request->route('id'); return Limit::perHour(1)->by($limitKey); });
说明
$request->route('id')用于获取路由中的{id}参数,确保每个路由ID对应独立的限流规则- 拼接后的
limitKey会为「用户+路由ID」或「IP+路由ID」生成唯一标识,实现不同ID路由各自每60分钟可访问1次的需求
内容的提问来源于stack exchange,提问作者mahdi hosseini
相关产品推荐
相关产品推荐

