Php Laravel Throttle中间件:是否有回调/处理程序?
我想使用,但我也想记录任何用户尝试次数过多的情况 是否有任何回调/处理程序,我可以在其中检测并处理它 假设我有一条这样的路线:Php Laravel Throttle中间件:是否有回调/处理程序?,php,laravel,laravel-5,throttling,Php,Laravel,Laravel 5,Throttling,我想使用,但我也想记录任何用户尝试次数过多的情况 是否有任何回调/处理程序,我可以在其中检测并处理它 假设我有一条这样的路线: Route::get('foo', array('before' => 'throttle:5,10', function () { return 'You shall pass!'; }, )); 如果达到最大计数,将触发此事件: Illuminate\Auth\Events\Lockout 所以你可以听听 protected $listen = [
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',
],
];
如果达到最大计数,将触发此事件:
Illuminate\Auth\Events\Lockout
所以你可以听听
protected $listen = [
...
'Illuminate\Auth\Events\Lockout' => [
'App\Listeners\LogLockout',
],
];
您只需扩展
ThrottleRequests
类并重新声明其构建异常
,或尝试处理其异常(\Symfony\Component\HttpKernel\exception\HttpException
,尝试次数太多)在app/Exceptions/Handler.php
内部,您可以扩展ThrottleRequests
类并重新声明其buildException
,或者尝试在app/Exceptions/Handler.php内部处理其异常(\Symfony\Component\HttpKernel\exception\HttpException
,尝试次数太多)。
illumb\Auth\Events\lock
事件仅在illumb\Foundation\Auth\ThrottlesLogins
中触发,但您仍然可以手动触发它
我就是这样做的:
在app/Exceptions/Handler.php
中添加以下use
语句:
使用light\Auth\Events\lock;
使用Symfony\Component\HttpKernel\Exception\HttpException;
将此添加到同一文件的报告
方法中:
if($HttpException的异常实例){
if('尝试次数太多。'=$exception->getMessage()){
事件(新锁定(请求());
}
}
执行php artisan make:listener LogThrottleLimitReached
并将此代码添加到handle
方法的app/Listeners/LogThrottleLimitReached.php
文件中:
$request=$event->request;
\日志::错误(sprintf)(
'已达到限制速率限制。URL:%s,正文:%s,IP:%s',
$request->url(),
json_encode($request->all()),
$request->ip()
));
在app/Providers/EventServiceProvider.php
中注册该侦听器:
使用App\Listeners\LogThrottleLimitReached;
使用Illumb\Auth\Events\Lockout;
及
protected$listen=[
锁定::类=>[
LogThrottleLimitReached::类,
],
];
illumb\Auth\Events\lock
事件仅在illumb\Foundation\Auth\ThrottlesLogins
中触发,但您仍然可以手动触发它
我就是这样做的:
在app/Exceptions/Handler.php
中添加以下use
语句:
使用light\Auth\Events\lock;
使用Symfony\Component\HttpKernel\Exception\HttpException;
将此添加到同一文件的报告
方法中:
if($HttpException的异常实例){
if('尝试次数太多。'=$exception->getMessage()){
事件(新锁定(请求());
}
}
执行php artisan make:listener LogThrottleLimitReached
并将此代码添加到handle
方法的app/Listeners/LogThrottleLimitReached.php
文件中:
$request=$event->request;
\日志::错误(sprintf)(
'已达到限制速率限制。URL:%s,正文:%s,IP:%s',
$request->url(),
json_encode($request->all()),
$request->ip()
));
在app/Providers/EventServiceProvider.php
中注册该侦听器:
使用App\Listeners\LogThrottleLimitReached;
使用Illumb\Auth\Events\Lockout;
及
protected$listen=[
锁定::类=>[
LogThrottleLimitReached::类,
],
];
听起来不错,但我看不出它是否会在达到费率限制时触发事件。我也在看这个类,我没有看到它在哪里触发事件听起来很棒,但我看不到它在达到RateLimit时触发事件。我也在看这门课,我看不出它在哪里激发了一个像符咒一样的活动。谢谢我唯一更改的是在处理程序类内部检查异常类型是否为ThrottleRequestsException
而不是HttpException
,然后比较429===$exception->getStatusCode()
。效果非常好。谢谢我唯一更改的是在处理程序类内部检查异常类型是否为ThrottleRequestsException
而不是HttpException
,然后比较429===$exception->getStatusCode()
。