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
,我在这里没有为此做任何事情。