本篇内容主要讲解“laravel8怎么使用throttle中间件”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“laravel8怎么使用throttle中间件”吧!laravle8 访问限制 th
本篇内容主要讲解“laravel8怎么使用throttle中间件”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“laravel8怎么使用throttle中间件”吧!
throttle 中间件介绍
频率限制经常用在 api 中,用于限制独立请求者对特定 API 的请求频率。每个 API 都会选择一个自己的频率限制时间跨度,GitHub 选择的是 1 小时,Laravel 中间件选择的是 1 分钟。
例如:throttle:60,1,即设置频率限制为每分钟 60 次,如果一个 IP 一分钟内超过这个限制,那么服务器就会返回 429 Too Many Attempts. 响应。
在 laravel8 中使用 throttle 中间件
我们通常在这里一般会使用 throttle 中间件来做一个限定条件的速率限定,比如说不在 IP 白名单中的 IP 限制一分钟访问多少次。相对于之前来说,laravel8 中的 throttle 中间件,有了更简单的使用方法。
首先我们可以看到在 Kernel.PHP 文件中有这样的定义
protected $middlewareGroups = [ 'WEB' => [ \App\Http\Middleware\EncryptCookies::class, \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, \Illuminate\Session\Middleware\StartSession::class, // \Illuminate\Session\Middleware\AuthenticateSession::class, \Illuminate\View\Middleware\ShareErrorsFromSession::class, \App\Http\Middleware\VerifyCsrfToken::class, \Illuminate\Routing\Middleware\SubstituteBindings::class, ], 'api' => [ // \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class, 'throttle:api', \Illuminate\Routing\Middleware\SubstituteBindings::class, ], ]; protected $routeMiddleware = [ 'auth' => \App\Http\Middleware\Authenticate::class, 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class, 'can' => \Illuminate\Auth\Middleware\Authorize::class, 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, 'passWord.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class, 'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class, 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, 'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class, ];
很明显看到其实 laravel8 中定义的'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, 是框架已经定义好的,并且在 api 中使用的是 throttle:api。
当然,一般的大家的用法可能就是在这里把 throttle:api 注释掉,新建一个 throttle 中间件或者是在路由中可以直接使用 throttle:60,1 这样的。
那如果是需要做一些复杂的判断,比如说我有很多个 IP 白名单想要排除掉,不做速率限制,或者是有个 VVVIP 用户不限制速率的时候怎么办呢?
这时,我们可以在 laravel8 中找到 App\Providers\RouteServiceProvider.php 文件,在文件最下面我们可以看到这样的写法
protected function configureRateLimiting() { RateLimiter::for('api', function (Request $request) { return Limit::perMinute(60)->by(optional($request->user())->id ?: $request->ip()); }); }
这里定义的 api 就是上面在 Kernel.php 文件中所使用的的 throttle:api。在这里,我们可以设定自定义的速率限制条件,比如说限制用户 IP 白名单之外的 IP 访问限制为每小时 60 次,白名单每次可以访问 1000 次
RateLimiter::for('apiHour', function (Request $request) { if(!in_array($request->ip(), config('ip.whitelist'))){ return Limit::perHour(60)->by($request->ip()); }else{ return Limit::perHour(1000)->by($request->ip()); } });
当然别忘记在 config 文件夹中新建 ip.php 文件
return [ 'whitelist' => [ '192.168.0.1', ],];
:heart:温馨提示:在使用的时候,用的是 api 接口路由的话,如果想使用自定义的 throttle:apiHour 不要忘记把原来 Kernel.php 中的 throttle:api 注释掉哟!
最后我们就可以在路由中快乐的使用自定义的速率控制中间件了
Route::group([ 'middleware' => ['throttle:apiHour']], function ($router) { Route::get('user', function (Request $request) { return $request->user(); });});
到此,相信大家对“laravel8怎么使用throttle中间件”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
--结束END--
本文标题: laravel8怎么使用throttle中间件
本文链接: https://lsjlt.com/news/346668.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0