有没有办法在Laravel的每条/个别路线上禁用速率限制?
我正在尝试测试一个接收大量请求的端点,但随机Laravel会开始响应{ status: 429, responseText: 'Too Many Attempts.' }几百个请求,这会让测试变得非常痛苦.
Edd*_*ove 89
在app/Http/Kernel.phpLaravel中,所有api路由都有默认的限制.
protected $middlewareGroups = [
...
'api' => [
'throttle:60,1',
],
];
Run Code Online (Sandbox Code Playgroud)
评论或增加它.
svi*_*eet 19
如果您使用 Laravel 8.x 或更高版本,您可以通过以下步骤使用 RateLimiter:
在您的 app/Providers/RouteServiceProvider.php 中找到下面的 configureRateLimiting:
protected function configureRateLimiting()
{
RateLimiter::for('api', function (Request $request) {
return Limit::perMinute(60)->by(optional($request->user())->id ?: $request->ip());
});
// no limit throttle
RateLimiter::for('none', function (Request $request) {
return Limit::none();
});
}
Run Code Online (Sandbox Code Playgroud)
在您的 app/web.php 中添加 'throttle:none:
Route::group(['middleware' => ['auth', 'throttle:none']], function ($router) {
Route::post('test', 'TestController@test');
});
Run Code Online (Sandbox Code Playgroud)
小智 15
假设您正在使用API路由,那么您可以在app/Http/Kernel.php中更改限制或完全取消.如果您需要限制其他路由,您可以单独为它们注册中间件.
(例如下面:油门 - 60次尝试然后锁定1分钟)
'api' => [
'throttle:60,1',
'bindings',
],
Run Code Online (Sandbox Code Playgroud)
Pet*_*lev 12
您可以使用cache:clear命令来清除您的缓存,包括您的速率限制,如下所示:
php artisan cache:clear
Run Code Online (Sandbox Code Playgroud)
实际上,您只能在测试中禁用某些中间件。
use Illuminate\Routing\Middleware\ThrottleRequests;
class YourTest extends TestCase
{
protected function setUp()
{
parent::setUp();
$this->withoutMiddleware(
ThrottleRequests::class
);
}
...
}
Run Code Online (Sandbox Code Playgroud)
如果要仅禁用自动测试,可以WithoutMiddleware在测试中使用特征.
use Illuminate\Foundation\Testing\WithoutMiddleware;
class YourTest extends TestCase {
use WithoutMiddleware;
...
Run Code Online (Sandbox Code Playgroud)
否则,只需'throttle:60,1',从内核文件(app/Http/Kernel.php)中删除该行,您的问题就会得到解决.
在Laravel 5.7中
动态速率限制 您可以根据已验证的用户模型的属性指定最大动态请求。例如,如果您的用户模型包含rate_limit属性,则可以将该属性的名称传递给节流中间件,以便用于计算最大请求数:
Route::middleware('auth:api', 'throttle:rate_limit,1')->group(function () {
Route::get('/user', function () {
//
});
});
Run Code Online (Sandbox Code Playgroud)
https://laravel.com/docs/5.7/routing#rate-limiting
小智 6
就我而言,我只是更改了“App\Providers\RouteServiceProvider”中的默认值perMinute()。
protected function configureRateLimiting()
{
RateLimiter::for('api', function (Request $request) {
$perMinute = env('APP_ENV') === 'testing' ? 1000 : 60;
return Limit::perMinute($perMinute)
->by(optional($request->user())->id ?: $request->ip());
});
}
Run Code Online (Sandbox Code Playgroud)
您可以在您的app/Http/Kernel.php
'api' => [
'throttle:120,1',
'bindings',
\App\Library\Cobalt\Http\Middleware\LogMiddleware::class,
],
Run Code Online (Sandbox Code Playgroud)
如果问题仍然存在,请尝试 artisan 命令php artisan cache:clear
| 归档时间: |
|
| 查看次数: |
38112 次 |
| 最近记录: |