source

라라벨에서 속도 제한 장치를 해제하시겠습니까?

manysource 2022. 11. 14. 21:48

라라벨에서 속도 제한 장치를 해제하시겠습니까?

Laravel의 모든/개별 경로에서 환율 제한을 비활성화하는 방법이 있습니까?

많은 요청을 수신하는 엔드포인트를 테스트하려고 하는데 Laravel이 랜덤으로 응답을 시작합니다.{ status: 429, responseText: 'Too Many Attempts.' }몇 백 건의 요청에 따라 테스트를 하는 것은 큰 고통입니다.

app/Http/Kernel.phpLaravel에는 모든 API 루트에 대한 기본 스로틀 제한이 있습니다.

protected $middlewareGroups = [
    ...
    'api' => [
        'throttle:60,1',
    ],
];

코멘트를 붙이거나 늘립니다.

실제로는 테스트에서 특정 미들웨어만 비활성화할 수 있습니다.

use Illuminate\Routing\Middleware\ThrottleRequests;

class YourTest extends TestCase 
{

    protected function setUp()
    {
        parent::setUp();
        $this->withoutMiddleware(
            ThrottleRequests::class
        );
    }
    ...
}

API 루트를 사용하고 있다고 가정하면 app/Http/Kernel에서 스로틀을 변경할 수 있습니다.php 또는 완전히 떼어냅니다.다른 루트에 대해 조정해야 할 경우 해당 루트에 대해 미들웨어를 별도로 등록할 수 있습니다.

(아래 항목: 스로틀 - 60회 시도 후 1분간 잠김)

'api' => [
        'throttle:60,1',
        'bindings',
    ],

사용할 수 있습니다.cache:clear다음과 같이 레이트 제한을 포함한 캐시를 클리어합니다.

php artisan cache:clear

인 라라벨 5.7

동적 환율 제한 인증된 사용자 모델의 속성에 따라 동적 요청 최대값을 지정할 수 있습니다.예를 들어 사용자 모델에 rate_limit 속성이 포함되어 있는 경우 스로틀 미들웨어에 속성 이름을 전달하여 최대 요청 수를 계산할 수 있습니다.

Route::middleware('auth:api', 'throttle:rate_limit,1')->group(function () {
    Route::get('/user', function () {
        //
    });
});

https://laravel.com/docs/5.7/routing#rate-limiting

자동 테스트에 대해서만 비활성화하려면WithoutMiddleware특성입니다.

use Illuminate\Foundation\Testing\WithoutMiddleware;

class YourTest extends TestCase {
    use WithoutMiddleware;

    ...

그렇지 않은 경우,'throttle:60,1',커널 파일의 행(app/Http/Kernel.php문제가 해결됩니다.

Larabel 8.x 이후를 사용하고 있는 경우는, 다음의 순서로 Rate Limiter 를 사용할 수 있습니다.

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();
    });

}

앱/web.php에서 'throttle:none'을 추가합니다.

Route::group(['middleware' => ['auth', 'throttle:none']], function ($router) {
    Route::post('test', 'TestController@test');
});

다음 행을 에 추가할 수 있습니다.app/Http/Kernel.php

    'api' => [
        'throttle:120,1',
        'bindings',
         \App\Library\Cobalt\Http\Middleware\LogMiddleware::class,
    ],

문제가 해결되지 않으면 기술자 명령을 사용해 보십시오.php artisan cache:clear

제 경우 디폴트값을 변경했을 뿐입니다.perMinute()[App\Providers\RouteServiceProvider

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());
        });
    }

장치 테스트에서 스로틀을 증가시켜 무서운 429를 방지하는 비해키 방법:

  1. 커널 파일 미들웨어에서 스로틀: 60,1을 제거합니다.
  2. 대신 환경변수를 사용하여 스로틀 미들웨어를 루트 그룹에 다시 추가합니다.
$requestsPerMinute = ENV("REQUESTS_PER_MINUTE", 60);
Route::middleware(["auth:api", "throttle:$requestsPerMinute,1"])->group(function(){
  // your routes
});
  1. 조절하기 전에 테스트 환경에서 더 많은 요청을 허용하려면 phpunit.xml에서 훨씬 높은 REQUES_PER_MINUTE 환경 변수를 정의합니다.
<server name="REQUESTS_PER_MINUTE" value="500"/>
  1. (.env에서 새로운 REQUEST_PER_MINUTE var를 정의합니다.단, 60으로 돌아갑니다).

을 달 수 .(throttle:60,1)App\Http\Kernel.php에서 이동합니다.

언급URL : https://stackoverflow.com/questions/43058219/disable-rate-limiter-in-laravel