Вот краткий обзор того, что я бы сделал.
Шаг 1
Создайте новое промежуточное ПО, т.е. ThrottleRequestsWithIp
php artisan make:middleware ThrottleRequestsWithIp
Шаг 2
Пусть он расширяет исходный класс промежуточного программного обеспечения дроссельной заслонки \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
Зарегистрируйте новое промежуточное ПО в ядре. php, например
'throttleIp' => \App\Http\Middleware\ThrottleRequestsWithIp::class
Шаг 4
Используйте его в своих маршрутах следующим образом
Route::get('/', [
'as' => 'products.index',
'uses' => 'CustomerProductController@index'
])->middleware('throttleIp:60,1');