Метод tooManyAttempts
Метод tooManyAttempts применяется к экземпляру класса RateLimiter и возвращает true, если количество попыток для указанного ключа достигло или превысило максимально допустимое значение. Первым параметром передаётся ключ (строка), вторым - максимальное количество попыток (целое число). Если лимит превышен, метод возвращает true, в противном случае - false.
Синтаксис
<?php
use Illuminate\Support\Facades\RateLimiter;
$result = RateLimiter::tooManyAttempts($key, $maxAttempts);
?>
Пример
Давайте проверим, превысил ли пользователь с id равным 1 лимит в 5 попыток входа:
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\RateLimiter;
class LoginController extends Controller
{
public function attempt()
{
$userId = 1;
$key = 'login_attempts_user_' . $userId;
$maxAttempts = 5;
if (RateLimiter::tooManyAttempts($key, $maxAttempts)) {
echo "Too many login attempts. Please try again later.";
} else {
echo "Login attempt allowed.";
}
}
}
?>
Результат выполнения кода при превышении лимита:
"Too many login attempts. Please try again later."
Результат выполнения кода при допустимом количестве попыток:
"Login attempt allowed."
Пример
Давайте используем метод tooManyAttempts вместе с hit для учёта попыток и проверки лимита для API-запросов:
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\RateLimiter;
class ApiController extends Controller
{
public function request($ip)
{
$key = 'api_requests_' . $ip;
$maxAttempts = 10;
if (RateLimiter::tooManyAttempts($key, $maxAttempts)) {
echo "Rate limit exceeded. Please wait.";
return;
}
RateLimiter::hit($key, 60);
echo "Request processed successfully.";
}
}
?>
Результат выполнения кода при первом запросе:
"Request processed successfully."
Результат выполнения кода после 10 запросов:
"Rate limit exceeded. Please wait."
Пример
Давайте проверим превышение лимита для разных операций с использованием условного оператора:
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\RateLimiter;
class UserController extends Controller
{
public function action($type, $userId)
{
$key = $type . '_' . $userId;
$maxAttempts = 3;
if (RateLimiter::tooManyAttempts($key, $maxAttempts)) {
echo "Action blocked. Too many attempts.";
return;
}
RateLimiter::hit($key, 30);
echo "Action performed successfully.";
}
}
?>
Результат выполнения кода при вызове action('login', 5) в третий раз:
"Action blocked. Too many attempts."