簡體   English   中英

Laravel Throttle Middleware:是否有回調/處理程序?

[英]Laravel Throttle Middleware: is there a callback / handler for it?

我想使用Laravel的Throttle Middleware ,但是我也想記錄用戶進行過多嘗試的任何情況。

是否有任何回調/處理程序可以檢測到並對其進行處理?

假設我有一條這樣的路線:

Route::get('foo', array('before' => 'throttle:5,10', function () {
    return 'You shall pass!';
}, ));

如果達到最大計數,它將觸發此事件:

Illuminate\Auth\Events\Lockout

所以你大概可以聽

protected $listen = [
    ...
    'Illuminate\Auth\Events\Lockout' => [
        'App\Listeners\LogLockout',
    ],
];

您可以擴展ThrottleRequests類並重新聲明其buildException ,或嘗試在app/Exceptions/Handler.php處理其異常( \\Symfony\\Component\\HttpKernel\\Exception\\HttpException\\Symfony\\Component\\HttpKernel\\Exception\\HttpException Many Attempts。')。

僅在Illuminate\\Foundation\\Auth\\ThrottlesLogins觸發Illuminate\\Auth\\Events\\Lockout事件,但是您仍然可以手動觸發它。

這就是我這樣做的方式:

  1. app/Exceptions/Handler.php添加以下use語句:
use Illuminate\Auth\Events\Lockout;
use Symfony\Component\HttpKernel\Exception\HttpException;
  1. 將此添加到同一文件的report方法中:
if ($exception instanceof HttpException) {
    if ('Too Many Attempts.' == $exception->getMessage()) {
        event(new Lockout(request()));
    }
}
  1. 執行php artisan make:listener LogThrottleLimitReached並將此代碼添加到app/Listeners/LogThrottleLimitReached.php文件的handle方法中:
$request = $event->request;

\Log::error(sprintf(
    'Throttling rate limit reached. URL: %s, Body: %s, IP: %s',
    $request->url(),
    json_encode($request->all()),
    $request->ip()
));
  1. app/Providers/EventServiceProvider.php注冊該偵聽器:
use App\Listeners\LogThrottleLimitReached;
use Illuminate\Auth\Events\Lockout;

protected $listen = [
    Lockout::class => [
        LogThrottleLimitReached::class,
    ],
];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM