laravel8更新之速率限制改進

wjcms發表於2020-11-08

原文地址:https://www.wjcms.net/archives/laravel8%E6%9B%B4%E6%96%B0%E4%B9%8B%E9%80%9F%E7%8E%87%E9%99%90%E5%88%B6%E6%94%B9%E8%BF%9B

Laravel的請求速率限制器功能已增強,具有更大的靈活性和功能,同時仍保持與先前版本的throttle中介軟體API的向後相容性。

速率限制器是使用RateLimiter立面的for方法定義的。該for方法接受一個速率限制器名稱和一個Closure,該Closure返回應應用於分配了該速率限制器的路由的限制配置:

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

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

由於速率限制器回撥接收傳入的HTTP請求例項,因此您可以根據傳入的請求或經過身份驗證的使用者動態構建適當的速率限制:

RateLimiter::for('uploads', function (Request $request) {
    return $request->user()->vipCustomer()
                ? Limit::none()
                : Limit::perMinute(100);
});

有時您可能希望將速率限制按任意值進行細分。例如,您可能希望允許使用者每個IP地址每分鐘100次訪問給定路由。為此,您可以by在建立速率限制時使用以下方法:

RateLimiter::for('uploads', function (Request $request) {
    return $request->user()->vipCustomer()
                ? Limit::none()
                : Limit::perMinute(100)->by($request->ip());
});

可以使用throttle 中介軟體將速率限制器附加到路由或路由組。油門中介軟體接受您希望分配給路線的速率限制器的名稱:

Route::middleware(['throttle:uploads'])->group(function () {
    Route::post('/audio', function () {
        //
    });

    Route::post('/video', function () {
        //
    });
});

相關文章