ホームページ >PHPフレームワーク >Laravel >laravel8でのスロットルミドルウェアの使い方を詳しく解説した記事

laravel8でのスロットルミドルウェアの使い方を詳しく解説した記事

藏色散人
藏色散人転載
2022-12-05 15:36:432650ブラウズ

この記事では、Laravel とスロットルミドルウェアに関する知識を提供します。主な内容は、laravel8 でのスロットルミドルウェアの使用方法を説明することです。一緒に見てみましょう。お役に立てば幸いです。

laravle8 アクセス制限スロットル ミドルウェア

スロットル ミドルウェアの紹介

周波数制限は、API の頻度を制限するためによく使用されます。独立したリクエスタによる特定の API へのリクエスト。各 API は独自の頻度制限期間を選択し、GitHub は 1 時間を選択し、Laravel ミドルウェアは 1 分を選択します。

例: throttle:60,1、つまり、頻度制限を 1 分あたり 60 回に設定します。IP が 1 分以内にこの制限を超えると、サーバーは 429 Too Many Attempts. 応答を返します。 [推奨される学習: laravel ビデオ チュートリアル ]

laravel でのスロットル ミドルウェアの使用8

ここでは通常、スロットル ミドルウェアを使用します。たとえば、IP ホワイトリストにない IP に対する 1 分あたりのアクセス数を制限する条件です。 laravel8のスロットルミドルウェアは以前と比べて使い方がシンプルになりました。

まず、Kernel.php ファイルにそのような定義があることがわかります

    /**
     * The application's route middleware groups.
     *
     * @var array<string, array<int, class-string|string>>
     */
    protected $middlewareGroups = [
        &#39;web&#39; => [
            \App\Http\Middleware\EncryptCookies::class,
            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
            \Illuminate\Session\Middleware\StartSession::class,
            // \Illuminate\Session\Middleware\AuthenticateSession::class,
            \Illuminate\View\Middleware\ShareErrorsFromSession::class,
            \App\Http\Middleware\VerifyCsrfToken::class,
            \Illuminate\Routing\Middleware\SubstituteBindings::class,
        ],
        &#39;api&#39; => [
            // \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
            &#39;throttle:api&#39;,
            \Illuminate\Routing\Middleware\SubstituteBindings::class,
        ],
    ];
    /**
     * The application&#39;s route middleware.
     *
     * These middleware may be assigned to groups or used individually.
     *
     * @var array<string, class-string|string>
     */
    protected $routeMiddleware = [
        &#39;auth&#39; => \App\Http\Middleware\Authenticate::class,
        &#39;auth.basic&#39; => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        &#39;cache.headers&#39; => \Illuminate\Http\Middleware\SetCacheHeaders::class,
        &#39;can&#39; => \Illuminate\Auth\Middleware\Authorize::class,
        &#39;guest&#39; => \App\Http\Middleware\RedirectIfAuthenticated::class,
        &#39;password.confirm&#39; => \Illuminate\Auth\Middleware\RequirePassword::class,
        &#39;signed&#39; => \Illuminate\Routing\Middleware\ValidateSignature::class,
        &#39;throttle&#39; => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        &#39;verified&#39; => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
    ];

laravel8 => \Illuminate\Routing\Middleware\ で定義されている「スロットル」であることは明らかです。 ThrottleRequests::class はフレームワークによって定義されており、throttle:api は API で使用されます。

もちろん、一般的な使用法は、ここで throttle:api をコメントアウトするか、新しいスロットル ミドルウェアを作成するか、ルーティングで throttle:60,1 を直接使用することです。

複雑な判断をする必要がある場合、たとえば、レート制限なしで除外したい IP ホワイトリストが多数ある場合や、レート制限を行わない VVVIP ユーザーがいる場合はどうすればよいでしょうか?

現時点では、laravel8 に App\Providers\RouteServiceProvider.php ファイルがあり、ファイルの下部に次の記述が確認できます

  /**
     * Configure the rate limiters for the application.
     *
     * @return void
     */
    protected function configureRateLimiting()
    {
        RateLimiter::for(&#39;api&#39;, function (Request $request) {
            return Limit::perMinute(60)->by(optional($request->user())->id ?: $request->ip());
        });
    }

ここで定義されている API は上記ですカーネル内 .php ファイルで使用される throttle:api。ここでは、カスタムのレート制限条件を設定できます。たとえば、ユーザー IP ホワイトリスト外の IP へのアクセスを 1 時間あたり 60 回に制限し、ホワイトリストは毎回 1,000 回アクセスできます。

RateLimiter::for(&#39;apiHour&#39;, function (Request $request) {
            if(!in_array($request->ip(), config(&#39;ip.whitelist&#39;))){
                return Limit::perHour(60)->by($request->ip());
            }else{
                return Limit::perHour(1000)->by($request->ip());
            }
        });

もちろん、作成を忘れたわけではありません。 config フォルダー内の新しい ip.php ファイル

return [
    &#39;whitelist&#39; => [
        &#39;192.168.0.1&#39;,
    ],
];

:heart: 警告: API インターフェイス ルーティングを使用する場合、カスタム throttle:apiHour を使用したい場合は、元のコメント アウトを変更することを忘れないでください。 Kernel.php の throttle:api!

ついに、ルーティングでカスタム レート制御ミドルウェアを喜んで使用できるようになりました

Route::group([
    &#39;middleware&#39; => [&#39;throttle:apiHour&#39;]
], function ($router) {
   Route::get(&#39;user&#39;, function (Request $request) {
       return $request->user();
   });
});

上記は、laravel8 でカスタム スロットル レイターを使用する際の問題点をまとめたものです。質問がある場合は、修正することができます。いつでも、見てくれた生徒たちに感謝します!

この記事は転載されたものです、元のアドレス: https://learnku.com/articles/73728

以上がlaravel8でのスロットルミドルウェアの使い方を詳しく解説した記事の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はlearnku.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。