91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

laravel8怎么使用throttle中間件

發布時間:2022-12-05 16:07:45 來源:億速云 閱讀:157 作者:iii 欄目:編程語言

本篇內容主要講解“laravel8怎么使用throttle中間件”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“laravel8怎么使用throttle中間件”吧!

laravle8 訪問限制 throttle 中間件

throttle 中間件介紹

頻率限制經常用在 API 中,用于限制獨立請求者對特定 API 的請求頻率。每個 API 都會選擇一個自己的頻率限制時間跨度,GitHub 選擇的是 1 小時,Laravel 中間件選擇的是 1 分鐘。

例如:throttle:60,1,即設置頻率限制為每分鐘 60 次,如果一個 IP 一分鐘內超過這個限制,那么服務器就會返回 429 Too Many Attempts. 響應。

在 laravel8 中使用 throttle 中間件

我們通常在這里一般會使用 throttle 中間件來做一個限定條件的速率限定,比如說不在 IP 白名單中的 IP 限制一分鐘訪問多少次。相對于之前來說,laravel8 中的 throttle 中間件,有了更簡單的使用方法。

首先我們可以看到在 Kernel.php 文件中有這樣的定義

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

很明顯看到其實 laravel8 中定義的'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, 是框架已經定義好的,并且在 api 中使用的是 throttle:api。

當然,一般的大家的用法可能就是在這里把 throttle:api 注釋掉,新建一個 throttle 中間件或者是在路由中可以直接使用 throttle:60,1 這樣的。

那如果是需要做一些復雜的判斷,比如說我有很多個 IP 白名單想要排除掉,不做速率限制,或者是有個 VVVIP 用戶不限制速率的時候怎么辦呢?

這時,我們可以在 laravel8 中找到 App\Providers\RouteServiceProvider.php 文件,在文件最下面我們可以看到這樣的寫法

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

這里定義的 api 就是上面在 Kernel.php 文件中所使用的的 throttle:api。在這里,我們可以設定自定義的速率限制條件,比如說限制用戶 IP 白名單之外的 IP 訪問限制為每小時 60 次,白名單每次可以訪問 1000 次

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

當然別忘記在 config 文件夾中新建 ip.php 文件

return [
    'whitelist' => [
        '192.168.0.1',
    ],
];

:heart:溫馨提示:在使用的時候,用的是 api 接口路由的話,如果想使用自定義的 throttle:apiHour 不要忘記把原來 Kernel.php 中的 throttle:api 注釋掉喲!

最后我們就可以在路由中快樂的使用自定義的速率控制中間件了

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

到此,相信大家對“laravel8怎么使用throttle中間件”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

扎兰屯市| 柞水县| 博爱县| 长海县| 兰溪市| 繁昌县| 依兰县| 澜沧| 白朗县| 新郑市| 浮山县| 屏东县| 梓潼县| 乌兰察布市| 西丰县| 贵溪市| 大兴区| 淮南市| 襄城县| 乡城县| 石林| 秀山| 涞水县| 凤台县| 富裕县| 沧州市| 镇康县| 郁南县| 广水市| 武义县| 金平| 竹溪县| 上虞市| 策勒县| 陇西县| 丽江市| 进贤县| 东丽区| 孟津县| 阜新| 九江市|