1: первая отправка происходит мгновенно, второй запрос попросит вас подождать 30 секунд, третий попросит подождать 60 секунд, четвертый будет попросить подождать 120 секунд (это по номеру)
2: Если IP отправляет 10 запросов в минуту, заблокируйте его на 3 часа.
но я застрял здесь, он не получает количество попыток, которые я Я не могу добавить пользовательскую функцию задержки. Подскажите, пожалуйста, где я ошибаюсь и что делать? я применяю их впервые
Код: Выделить всё
public function handle($request, Closure $next)
{
$limiter = app(RateLimiter::class);
$key = sha1($request->ip());
$maxAttempts = 4;
$hitCount = $limiter->attempts($key);
if ($hitCount == 2)
{
$decayMinutes = 30;
}
elseif ($hitCount == 3)
{
$decayMinutes = 60;
}
elseif ($hitCount == 4)
{
$decayMinutes = 120;
}
else
{
$decayMinutes = 10;
}
if ($limiter->tooManyAttempts($key, $maxAttempts))
{
$retryAfter = $limiter->availableIn($key);
return new Response('Rate limit exceeded. Please wait ' . $retryAfter . ' seconds before making another request.', 429);
}
$limiter->hit($key, $decayMinutes);
$response = $next($request);
return $response;
}
Я пробовал это без каких-либо совпадений с максимальным количеством попыток 1, все работало нормально, но теперь я пытаюсь задать разную задержку для разного количества запросов, это не работает должным образом.
Подробнее здесь: https://stackoverflow.com/questions/783 ... vel-rate-l