Количество доступных запросов на страницу в минуту
Указать, сколько запросов может быть на странице, можно через метод middleware('throttle').
// Разрешено 100 запросов в минуту
Route::get('pages/update', [PagesController::class, 'update'])->middleware('throttle:100,1');
На примере выше указано, что на странице «pages/about» может быть не больше 100 запросов в минуту. Если запросов будет больше, то откроется страница с ошибкой «429: Too Many Requests».

Если это условие надо указать нескольким страницам, то их можно объединить через метод Route::middleware('throttle').
Route::middleware('throttle:100,1')->group(function() {
Route::get('pages/create', [PagesController::class, 'about']);
Route::get('pages/update', [PagesController::class, 'contacts']);
});
Задать имя
В файле «app/Providers/AppServiceProvider.php» можно задать имя для ограничения запросов.
use Illuminate\Cache\RateLimiting\Limit;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\RateLimiter;
public function boot(): void
{
RateLimiter::for('custom', function (Request $request) {
return Limit::perMinute(100);
});
}
И в роутах можно задать примерно следующий код:
Route::get('pages/update', [PagesController::class, 'update'])->middleware('throttle:custom');
Количество доступных запросов в минуту по IP
По умолчанию, количество доступных запросов на страницу задаётся всем пользователям.
Можно сделать ограничение по IP пользователей (у каждого пользователя свой IP-адрес). Делается это через код ниже:
public function boot(): void
{
RateLimiter::for('ip', function (Request $request) {
return Limit::perMinute(100)->by($request->ip());
});
}
Осталось только задать ограничение для нужной страницы:
Route::get('pages/update', [PagesController::class, 'update'])->middleware('throttle:ip');
Количество доступных запросов в минуту по пользователю
Если страница доступна только авторизованным, то ограничения на количество запросов можно задать текущему пользователю через код ниже:
public function boot(): void
{
RateLimiter::for('user', function (Request $request) {
return Limit::perMinute(100)->by($request->user()->id);
});
}
Осталось только задать ограничение для нужной страницы:
Route::get('pages/update', [PagesController::class, 'update'])->middleware('throttle:user');
Поддержать автора
Все статьи создаются и поддерживаются одним человеком,
если вам нравится контент, вы можете поддержать автора сайта
