라라벨에서 속도 제한 장치를 해제하시겠습니까?
Laravel의 모든/개별 경로에서 환율 제한을 비활성화하는 방법이 있습니까?
많은 요청을 수신하는 엔드포인트를 테스트하려고 하는데 Laravel이 랜덤으로 응답을 시작합니다.{ status: 429, responseText: 'Too Many Attempts.' }
몇 백 건의 요청에 따라 테스트를 하는 것은 큰 고통입니다.
인app/Http/Kernel.php
Laravel에는 모든 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를 방지하는 비해키 방법:
- 커널 파일 미들웨어에서 스로틀: 60,1을 제거합니다.
- 대신 환경변수를 사용하여 스로틀 미들웨어를 루트 그룹에 다시 추가합니다.
$requestsPerMinute = ENV("REQUESTS_PER_MINUTE", 60);
Route::middleware(["auth:api", "throttle:$requestsPerMinute,1"])->group(function(){
// your routes
});
- 조절하기 전에 테스트 환경에서 더 많은 요청을 허용하려면 phpunit.xml에서 훨씬 높은 REQUES_PER_MINUTE 환경 변수를 정의합니다.
<server name="REQUESTS_PER_MINUTE" value="500"/>
- (.env에서 새로운 REQUEST_PER_MINUTE var를 정의합니다.단, 60으로 돌아갑니다).
을 달 수 .(throttle:60,1)
App\Http\Kernel.php에서 이동합니다.
언급URL : https://stackoverflow.com/questions/43058219/disable-rate-limiter-in-laravel
'source' 카테고리의 다른 글
MySQL - 테이블 'my_table'이 테이블 잠금으로 잠기지 않았습니다. (0) | 2022.11.23 |
---|---|
개체 또는 클래스 이름 가져오기 (0) | 2022.11.14 |
ERROR 1130 (HY000):호스트 "는 이 MySQL 서버에 연결할 수 없습니다. (0) | 2022.11.14 |
고유한 쌍 SQL 덮어쓰기 (0) | 2022.11.14 |
Java에서는 "this"가 null이 될 수 있습니까? (0) | 2022.11.14 |