use Illuminate\Support\Facades\RateLimiter;
class CodeZiDotProTestRateLimit extends Controller{
public function test_rate_limit_only_success(Request $request){
// Step 1: Validate the request data
$validator = Validator::make($request->all(), [
'name' => 'required|string',
'email' => 'required|email',
'password' => 'required|min:8',
]);
if ($validator->fails()) {
return response()->json(['errors' => $validator->errors()], 422);
}
// Step 2: Apply rate limiting to this controller action
$key = 'test_rate_limit_only_success_by_ip_'.request()->ip();
if (RateLimiter::tooManyAttempts($key,10)) {
return response()->json(['errors' => 'You have made too much in a short time. Please wait after 1 minute'], 422);
} else {
RateLimiter::hit($key, 60);
}
}
這是原始碼
}
假設我的網址是 Example.com/test_Rate_Limit_only_success。
在此範例中,當使用者向系統發送請求時,應用程式仍會驗證該請求(如果發生錯誤,使用者將發送無限的請求)。在數據有效的情況下,限速部分將開始工作。
您可能需要製作自己的中間件,但您可以擴展
ThrottleRequests
類別並自訂您想要處理回應的方式:然後將您的中間件加入
Kernel.php
:然後像原來的throttle中間件一樣在路由中使用它:
注意:如果您想返回從
RateLimiter::for
建置的自訂回應,您可能必須重寫handleRequestUsingNamedLimiter
,我在這裡沒有為此做任何事情。