/** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next * @return mixed */ public function handle($request, Closure $next, $maxAttempts = 60, $decayMinutes = 1) { $key = $request->fingerprint(); if ($this->limiter->tooManyAttempts($key, $maxAttempts, $decayMinutes)) { return new Response('Too Many Attempts.', 429, ['Retry-After' => $this->limiter->availableIn($key), 'X-RateLimit-Limit' => $maxAttempts, 'X-RateLimit-Remaining' => 0]); } $this->limiter->hit($key, $decayMinutes); return $next($request)->withHeaders(['X-RateLimit-Limit' => $maxAttempts, 'X-RateLimit-Remaining' => $maxAttempts - $this->limiter->attempts($key) + 1]); }
/** * Get a unique fingerprint for the request / route / IP address. * * @return string * @static */ public static function fingerprint() { return \Illuminate\Http\Request::fingerprint(); }
/** * Resolve request signature. * * @param \Illuminate\Http\Request $request * @return string */ protected function resolveRequestSignature($request) { return $request->fingerprint(); }