您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息
免费发信息
三六零分类信息网 > 金昌分类信息网,免费分类信息发布

一文详解laravel8如何使用throttle中间件

2024/3/21 23:50:48发布36次查看
本篇文章给大家laravel和throttle中间件的相关知识,主要内容是教大家怎么在 laravel8 中去使用 throttle 中间件的,下面一起来看看吧,希望对大家有所帮助!
laravle8 访问限制 throttle 中间件throttle 中间件介绍
频率限制经常用在 api 中,用于限制独立请求者对特定 api 的请求频率。每个 api 都会选择一个自己的频率限制时间跨度,github 选择的是 1 小时,laravel 中间件选择的是 1 分钟。
例如:throttle:60,1,即设置频率限制为每分钟 60 次,如果一个 ip 一分钟内超过这个限制,那么服务器就会返回 429 too many attempts. 响应。【推荐学习:laravel视频教程】
在 laravel8 中使用 throttle 中间件
我们通常在这里一般会使用 throttle 中间件来做一个限定条件的速率限定,比如说不在 ip 白名单中的 ip 限制一分钟访问多少次。相对于之前来说,laravel8 中的 throttle 中间件,有了更简单的使用方法。
首先我们可以看到在 kernel.php 文件中有这样的定义
/** * the application's route middleware groups. * * @var array<string, array<int, class-string|string>> */ 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, ], ]; /** * the application's route middleware. * * these middleware may be assigned to groups or used individually. * * @var array<string, class-string|string> */ 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 文件,在文件最下面我们可以看到这样的写法
/** * configure the rate limiters for the application. * * @return void */ 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 速率器的问题,如有问题,大家可以随时指正,谢谢各位同学观看!
本文系转载,原文地址:https://learnku.com/articles/73728
以上就是一文详解laravel8如何使用throttle中间件的详细内容。
金昌分类信息网,免费分类信息发布

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录