Ларавель. Как приостановить запросы пользователей на более длительное время после превышения лимита регулирования?

Laravel имеет встроенную возможность контролировать регулирование запросов. Примером является промежуточное ПО throttle:60,1, что означает 60 запросов в минуту к определенному маршруту. Но есть ли что-нибудь, чтобы приостановить запросы, если этот предел превышен?

Что мне нужно? у меня есть 2 маршрута:
/lock ==> эта запись обновления с идентификатором сеанса
/unlock ==> это должно разблокироваться, если был отправлен правильный пароль, но если он имеет 5 попыток в минуту с неверным паролем (throttle:5,1) , то он должен быть приостановлен на 30 минут, и каждый запрос должен быть отклонен

Здесь мы имеем динамическое дросселирование. Могу ли я реализовать это, используя встроенную функциональность laravel?


person LINKeRxUA    schedule 12.11.2018    source источник


Ответы (1)


Вы можете выполнить любую логику, которую захотите, расширив исходное промежуточное ПО ThrottleRequests:

<?php

namespace App\Http\Middleware;

use Closure;

class ThrottleRequests extends \Illuminate\Routing\Middleware\ThrottleRequests
{
    public function handle($request, Closure $next, $maxAttempts = 60, $decayMinutes = 2)
    {
        $original = parent::handle($request, $next, $maxAttempts, $decayMinutes);

        if ($this->limiter->tooManyAttempts($key, $maxAttempts, $decayMinutes)) {
            // Do whatever you need to...
        }

        return $next($request);
    }
}

Затем отредактируйте файл App\Http\Kernel.php, чтобы использовать собственное промежуточное ПО ThrottleRequests:

protected $routeMiddleware = [
   'throttle' => \App\Http\Middleware\ThrottleRequests::class,
];
person Stephen Lake    schedule 12.11.2018