как перевести дроссель в laravel? - PullRequest
0 голосов
/ 22 сентября 2019

Я использую версию Laravel 5.7.Я использую throttle в Kernel.php, чтобы пользователь не мог отправлять запросы более 60. Я хотел бы перевести его сообщение «Слишком много попыток».и использовать собственное сообщение.как я могу сделать это в Laravel?Где я могу найти это?

Ответы [ 4 ]

1 голос
/ 22 сентября 2019


use Symfony\Component\HttpKernel\Exception\HttpException;

if($exception instanceof HttpException && $exception->getStatusCode() == 429) {
return response()->json([
'message' => 'Too Many Attempts',
'code' => 429
], 429)->withHeaders($exception->getHeaders());
}


1 голос
/ 22 сентября 2019

В вашем обработчике исключений Laravel вы можете обработать это исключение перед рендерингом и заменить это исключение на ваше собственное исключение.

В app / Exceptions / Handler.php

/**
 * Render an exception into an HTTP response.
 *
 * @param  \Illuminate\Http\Request  $request
 * @param  \Exception  $exception
 * @return \Illuminate\Http\Response|\Illuminate\Http\JsonResponse
 */
public function render($request, Exception $exception)
{
    if($exception instanceof ThrottleRequestsException) {
        return parent::render(
            $request, new ThrottleRequestsException(
                'Your message',
                $exception->getPrevious(),
                $exception->getHeaders(),
                $exception->getCode()
            )
        );
    }

    return parent::render($request, $exception);
}
1 голос
/ 22 сентября 2019

Вы можете создать свое собственное промежуточное программное обеспечение в папке app/Http/Middlewares, расширить базовый класс \Illuminate\Routing\Middleware\ThrottleRequests и переопределить метод buildException ( исходная реализация здесь ).

Затем назначитьthrottle Промежуточное программное обеспечение для вашего пользовательского класса Middleware в Kernel.php

0 голосов
/ 22 сентября 2019

Я нашел файл по этому адресу Laravel: vendor\laravel\framework\src\llluminate\Routing\Middleware\ThrottleRequests.php

protected function buildException($key, $maxAttempts)
    {
        $retryAfter = $this->getTimeUntilNextRetry($key);

        $headers = $this->getHeaders(
            $maxAttempts,
            $this->calculateRemainingAttempts($key, $maxAttempts, $retryAfter),
            $retryAfter
        );

        return new ThrottleRequestsException(
            'You can change message here and put your message!', null, $headers
        );
    }
...