Как использовать ограничение скорости API для любых аутентифицированных пользователей?

Например: маршрут API, который я хочу разрешить 500 запросов (от любого пользователя вошел в систему) за 15 минут.

  • залогинен в пользователь А запросов API => осталось 499
  • залогинен в пользователь B запросы API => осталось 498

* Ограничение скорости API будет сброшено через 15 минут.

Как это сделать?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
1
0
31
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Добавьте столбцы limit и limit_created_at в таблицу пользователей в базе данных и создайте промежуточное ПО с аналогичным кодом:

namespace App\Http\Middleware;

use Closure;
use Illuminate\Support\Facades\Auth;

class AuthLimitMiddleware
{

    public function handle($request, Closure $next, $guard = null)
    {
        $user = Auth::user(); //or your get user method

        DB::table('users')->where('id', $user->id)->increment('limit');

        if ($user->limit_created_at + 60 * 15 > time()) {
           $user->limit = 0;
           $user->limit_craeted_at = now();
           $user->save();
        }

        if ($user->limit > 500) {
             throw new ConflictHttpException('limit is more for 500')
        }

        return $next($request);
    }
}

Теперь зарегистрируйте промежуточное ПО в файле ядра:

protected $routeMiddleware = [
 ...
  'limit' => \App\Http\Middleware\AuthLimitMiddleware::class,
];

И использовать на маршруте:

Route::get('some/route')->middleware('auth', 'limit');

Спасибо за это, я думал сделать это с помощью промежуточного программного обеспечения laravel throttle .. но это работает для меня.

rook99 03.08.2018 09:30

Другие вопросы по теме