Laravel API 从速率限制中排除 1 个 IP 地址
Laravel API exclude 1 ip address from rate limiting
在 Laravel API 上,我使用默认中间件设置了速率限制;
Route::group(['prefix' => 'products'], function() {
Route::get('/', ['as' => 'products.index', 'uses' => 'CustomerProductController@index'])->middleware('throttle:60,1');
Route::get('/{product}', ['as' => 'products.show', 'uses' => 'CustomerProductController@show'])->middleware('throttle:50,1');
});
现在我需要制作自己的中间件来排除 1 个 ip 地址的限制。
但不知何故,我只能找到以其他方式做事的建议,例如。限制一组 IP 地址。
有人能给我一个正确的方向吗?
下面是我将要做什么的简短概述。
步骤 1
创建一个新的中间件,即 ThrottleRequestsWithIp
php artisan make:middleware ThrottleRequestsWithIp
步骤 2
让它扩展原来的油门中间件class \Illuminate\Routing\Middleware\ThrottleRequests
.
如果你想看一下原始的框架中间件,你可以在/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php
下找到它
覆盖 handle
方法来检查 IP 地址,如果找不到则调用父方法。
这就是您的 App\Http\Middleware\ThrottleRequestsWithIp
的样子
<?php
namespace App\Http\Middleware;
use Closure;
class ThrottleRequestsWithIp extends \Illuminate\Routing\Middleware\ThrottleRequests
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next, $maxAttempts = 60, $decayMinutes = 1, $prefix = '')
{
if($request->ip() === "192.168.10.2")
return $next($request);
return parent::handle($request, $next, $maxAttempts, $decayMinutes, $prefix);
}
}
步骤 3
在 Kernel.php 中注册您的新中间件,例如
'throttleIp' => \App\Http\Middleware\ThrottleRequestsWithIp::class
步骤 4
像这样在你的路线中使用它
Route::get('/', [
'as' => 'products.index',
'uses' => 'CustomerProductController@index'
])->middleware('throttleIp:60,1');
在 Laravel API 上,我使用默认中间件设置了速率限制;
Route::group(['prefix' => 'products'], function() {
Route::get('/', ['as' => 'products.index', 'uses' => 'CustomerProductController@index'])->middleware('throttle:60,1');
Route::get('/{product}', ['as' => 'products.show', 'uses' => 'CustomerProductController@show'])->middleware('throttle:50,1');
});
现在我需要制作自己的中间件来排除 1 个 ip 地址的限制。 但不知何故,我只能找到以其他方式做事的建议,例如。限制一组 IP 地址。
有人能给我一个正确的方向吗?
下面是我将要做什么的简短概述。
步骤 1
创建一个新的中间件,即 ThrottleRequestsWithIp
php artisan make:middleware ThrottleRequestsWithIp
步骤 2
让它扩展原来的油门中间件class \Illuminate\Routing\Middleware\ThrottleRequests
.
如果你想看一下原始的框架中间件,你可以在/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php
覆盖 handle
方法来检查 IP 地址,如果找不到则调用父方法。
这就是您的 App\Http\Middleware\ThrottleRequestsWithIp
的样子
<?php
namespace App\Http\Middleware;
use Closure;
class ThrottleRequestsWithIp extends \Illuminate\Routing\Middleware\ThrottleRequests
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next, $maxAttempts = 60, $decayMinutes = 1, $prefix = '')
{
if($request->ip() === "192.168.10.2")
return $next($request);
return parent::handle($request, $next, $maxAttempts, $decayMinutes, $prefix);
}
}
步骤 3
在 Kernel.php 中注册您的新中间件,例如
'throttleIp' => \App\Http\Middleware\ThrottleRequestsWithIp::class
步骤 4
像这样在你的路线中使用它
Route::get('/', [
'as' => 'products.index',
'uses' => 'CustomerProductController@index'
])->middleware('throttleIp:60,1');