Laravel 8 定義限流器

2021-07-16 17:52 更新

Laravel 包含功能強(qiáng)大且可自定義的限流服務(wù),您可以利用這些服務(wù)來(lái)限制給定的路由或一組路由的流量。首先,您應(yīng)該定義滿足應(yīng)用需求的限流器配置。通常,這可以寫(xiě)在應(yīng)用程序的 RouteServiceProvider 中。

限流器可以使用 RateLimiter 門(mén)面的 for 方法定義。 for 方法接受一個(gè)速率限制器名稱(chēng)和一個(gè)閉包會(huì)返回限制配置,該配置可以應(yīng)用于分配了該限流器的路由:

use Illuminate\Cache\RateLimiting\Limit;
use Illuminate\Support\Facades\RateLimiter;

RateLimiter::for('global', function (Request $request) {
    return Limit::perMinute(1000);
}); 

如果傳入的請(qǐng)求速率超過(guò)了設(shè)置的請(qǐng)求頻率,Laravel 會(huì)自動(dòng)的響應(yīng) HTTP 429 的狀態(tài)碼。如果你想自定義響應(yīng)內(nèi)容,使用 response 方法:

RateLimiter::for('global', function (Request $request) {
    return Limit::perMinute(1000)->response(function () {
        return response('Custom response...', 429);
    });
});

Laravel 提供了使用 $request 實(shí)例調(diào)取參數(shù),如 user () 來(lái)進(jìn)行身份驗(yàn)證從而自定義請(qǐng)求頻率的大小或是否限制。

RateLimiter::for('uploads', function (Request $request) {
    return $request->user()->vipCustomer()
                ? Limit::none()
                : Limit::perMinute(100);
}); 
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)