Viewing file: ThrottleRequests.php (1.71 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Support\Facades\RateLimiter;
class ThrottleRequests
{
// public function handle($request, Closure $next, $maxAttempts = 60, $decayMinutes = 1)
// {
// $key = $request->ip();
// $maxAttempts = (int) $maxAttempts;
// $decayMinutes = (int) $decayMinutes;
// if (RateLimiter::tooManyAttempts($key, $maxAttempts)) {
// return response('Too Many Requests', 429);
// }
// RateLimiter::hit($key, $decayMinutes * 60);
// return $next($request);
// }
public function handle($request, Closure $next, $maxAttempts = 60, $decayMinutes = 1)
{
// Identify the user (e.g., via authenticated user or IP if unauthenticated)
$key = $request->user() ? $request->user()->id : $request->ip();
// // Customize rate limits for specific users if needed
// if ($request->user() && $request->user()->is_premium) {
// $maxAttempts = 120; // Higher limit for premium users
// }
// Check if the user has exceeded the rate limit
if (RateLimiter::tooManyAttempts($key, $maxAttempts)) {
$retryAfter = RateLimiter::availableIn($key);
return response()->json([
'message' => 'Too Many Requests',
'retry_after' => $retryAfter
], 429);
}
// Register a hit for the user
RateLimiter::hit($key, $decayMinutes * 60);
return $next($request);
}
}
?>
|