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






Добавьте столбцы 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 .. но это работает для меня.