Laravel. Как приостановить пользовательские запросы на более длительное время после превышения лимита регулирования? - PullRequest
0 голосов
/ 12 ноября 2018

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

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

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

1 Ответ

0 голосов
/ 12 ноября 2018

Вы можете выполнить любую логику, если захотите, расширив исходное промежуточное ПО 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,
];
...