Метод remaining
Метод remaining класса RateLimiter применяется для определения количества оставшихся доступных попыток выполнения действия в рамках текущего временного окна. Первым параметром передаётся ключ ограничителя, вторым необязательным параметром - количество разрешённых попыток. Если второй параметр не указан, метод использует значение из конфигурации ограничителя. Метод возвращает целое число оставшихся попыток.
Синтаксис
<?php
use Illuminate\Support\Facades\RateLimiter;
$remaining = RateLimiter::remaining($key);
$remaining = RateLimiter::remaining($key, $maxAttempts);
?>
Пример
Давайте получим оставшиеся попытки для ключа 'login:user1':
<?php
use Illuminate\Support\Facades\RateLimiter;
$key = 'login:user1';
$maxAttempts = 5;
// Записываем несколько попыток
RateLimiter::hit($key, 60);
RateLimiter::hit($key, 60);
$remaining = RateLimiter::remaining($key, $maxAttempts);
echo $remaining;
?>
Результат выполнения кода:
3
В этом примере после двух неудачных попыток входа, пользователь может сделать ещё три попытки до достижения лимита в пять.
Пример
Использование метода remaining для проверки доступных попыток перед выполнением действия:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\RateLimiter;
class AuthController extends Controller
{
public function login(Request $request)
{
$key = 'login:' . $request->input('email');
$maxAttempts = 5;
if (RateLimiter::remaining($key, $maxAttempts) > 0) {
// Пользователь может попытаться войти
return response()->json(['status' => 'allowed']);
} else {
$seconds = RateLimiter::availableIn($key);
return response()->json([
'status' => 'too_many_attempts',
'retry_after' => $seconds
]);
}
}
}
?>
Результат выполнения кода при запросе с email 'test@example.com':
{"status":"allowed"}
Пример
Использование метода remaining в контроллере для отображения оставшихся попыток пользователю:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\RateLimiter;
class ProfileController extends Controller
{
public function showAttempts(Request $request)
{
$key = 'profile:' . $request->user()->id;
$maxAttempts = 3;
$remaining = RateLimiter::remaining($key, $maxAttempts);
$totalAttempts = RateLimiter::attempts($key);
return view('profile.attempts', [
'remaining' => $remaining,
'total' => $totalAttempts,
'max' => $maxAttempts
]);
}
}
?>
Смотрите также
-
метод
attempt,
который выполняет действие и увеличивает счётчик попыток -
метод
tooManyAttempts,
который проверяет превышен ли лимит попыток -
метод
availableIn,
который возвращает количество секунд до сброса попыток -
метод
hit,
который увеличивает счётчик попыток