class ThrottleRequestsWithRedis extends ThrottleRequests (View source)

Traits

Properties

protected RateLimiter $limiter

The rate limiter instance.

from  ThrottleRequests
static protected bool $shouldHashKeys

Indicates if the rate limiter keys should be hashed.

from  ThrottleRequests
protected Factory $redis

The Redis factory implementation.

array $decaysAt

The timestamp of the end of the current duration by key.

array $remaining

The number of remaining slots by key.

Methods

int
secondsUntil(DateTimeInterface|DateInterval|int $delay)

Get the number of seconds until the given DateTime.

int
availableAt(DateTimeInterface|DateInterval|int $delay = 0)

Get the "available at" UNIX timestamp.

parseDateInterval(DateTimeInterface|DateInterval|int $delay)

If the given value is an interval, convert it to a DateTime instance.

int
currentTime()

Get the current system time as a UNIX timestamp.

string
runTimeForHumans(float $startTime, float $endTime = null)

Given a start time, format the total run time for human readability.

void
__construct(RateLimiter $limiter, Factory $redis)

Create a new request throttler.

static string
using(string $name)

Specify the named rate limiter to use for the middleware.

static string
with(int $maxAttempts = 60, int $decayMinutes = 1, string $prefix = '')

Specify the rate limiter configuration for the middleware.

Response
handle(Request $request, Closure $next, int|string $maxAttempts = 60, float|int $decayMinutes = 1, string $prefix = '')

Handle an incoming request.

Response
handleRequestUsingNamedLimiter(Request $request, Closure $next, string $limiterName, Closure $limiter)

Handle an incoming request.

Response
handleRequest(Request $request, Closure $next, array $limits)

Handle an incoming request.

int
resolveMaxAttempts(Request $request, int|string $maxAttempts)

Resolve the number of attempts if the user is authenticated or not.

string
resolveRequestSignature(Request $request)

Resolve request signature.

buildException(Request $request, string $key, int $maxAttempts, callable|null $responseCallback = null)

Create a 'too many attempts' exception.

int
getTimeUntilNextRetry(string $key)

Get the number of seconds until the lock is released.

Response
addHeaders(Response $response, int $maxAttempts, int $remainingAttempts, int|null $retryAfter = null)

Add the limit header information to the given response.

array
getHeaders(int $maxAttempts, int $remainingAttempts, int|null $retryAfter = null, Response|null $response = null)

Get the limit headers information.

int
calculateRemainingAttempts(string $key, int $maxAttempts, int|null $retryAfter = null)

Calculate the number of remaining attempts.

static void
shouldHashKeys(bool $shouldHashKeys = true)

Specify whether rate limiter keys should be hashed.

mixed
tooManyAttempts(string $key, int $maxAttempts, int $decaySeconds)

Determine if the given key has been "accessed" too many times.

getRedisConnection()

Get the Redis connection that should be used for throttling.

Details

protected int secondsUntil(DateTimeInterface|DateInterval|int $delay)

Get the number of seconds until the given DateTime.

Parameters

DateTimeInterface|DateInterval|int $delay

Return Value

int

protected int availableAt(DateTimeInterface|DateInterval|int $delay = 0)

Get the "available at" UNIX timestamp.

Parameters

DateTimeInterface|DateInterval|int $delay

Return Value

int

protected DateTimeInterface|int parseDateInterval(DateTimeInterface|DateInterval|int $delay)

If the given value is an interval, convert it to a DateTime instance.

Parameters

DateTimeInterface|DateInterval|int $delay

Return Value

DateTimeInterface|int

protected int currentTime()

Get the current system time as a UNIX timestamp.

Return Value

int

protected string runTimeForHumans(float $startTime, float $endTime = null)

Given a start time, format the total run time for human readability.

Parameters

float $startTime
float $endTime

Return Value

string

void __construct(RateLimiter $limiter, Factory $redis)

Create a new request throttler.

Parameters

RateLimiter $limiter
Factory $redis

Return Value

void

static string using(string $name)

Specify the named rate limiter to use for the middleware.

Parameters

string $name

Return Value

string

static string with(int $maxAttempts = 60, int $decayMinutes = 1, string $prefix = '')

Specify the rate limiter configuration for the middleware.

Parameters

int $maxAttempts
int $decayMinutes
string $prefix

Return Value

string

Response handle(Request $request, Closure $next, int|string $maxAttempts = 60, float|int $decayMinutes = 1, string $prefix = '')

Handle an incoming request.

Parameters

Request $request
Closure $next
int|string $maxAttempts
float|int $decayMinutes
string $prefix

Return Value

Response

Exceptions

ThrottleRequestsException
MissingRateLimiterException

protected Response handleRequestUsingNamedLimiter(Request $request, Closure $next, string $limiterName, Closure $limiter)

Handle an incoming request.

Parameters

Request $request
Closure $next
string $limiterName
Closure $limiter

Return Value

Response

Exceptions

ThrottleRequestsException

protected Response handleRequest(Request $request, Closure $next, array $limits)

Handle an incoming request.

Parameters

Request $request
Closure $next
array $limits

Return Value

Response

Exceptions

ThrottleRequestsException

protected int resolveMaxAttempts(Request $request, int|string $maxAttempts)

Resolve the number of attempts if the user is authenticated or not.

Parameters

Request $request
int|string $maxAttempts

Return Value

int

Exceptions

MissingRateLimiterException

protected string resolveRequestSignature(Request $request)

Resolve request signature.

Parameters

Request $request

Return Value

string

Exceptions

RuntimeException

protected ThrottleRequestsException|HttpResponseException buildException(Request $request, string $key, int $maxAttempts, callable|null $responseCallback = null)

Create a 'too many attempts' exception.

Parameters

Request $request
string $key
int $maxAttempts
callable|null $responseCallback

Return Value

ThrottleRequestsException|HttpResponseException

protected int getTimeUntilNextRetry(string $key)

Get the number of seconds until the lock is released.

Parameters

string $key

Return Value

int

protected Response addHeaders(Response $response, int $maxAttempts, int $remainingAttempts, int|null $retryAfter = null)

Add the limit header information to the given response.

Parameters

Response $response
int $maxAttempts
int $remainingAttempts
int|null $retryAfter

Return Value

Response

protected array getHeaders(int $maxAttempts, int $remainingAttempts, int|null $retryAfter = null, Response|null $response = null)

Get the limit headers information.

Parameters

int $maxAttempts
int $remainingAttempts
int|null $retryAfter
Response|null $response

Return Value

array

protected int calculateRemainingAttempts(string $key, int $maxAttempts, int|null $retryAfter = null)

Calculate the number of remaining attempts.

Parameters

string $key
int $maxAttempts
int|null $retryAfter

Return Value

int

static void shouldHashKeys(bool $shouldHashKeys = true)

Specify whether rate limiter keys should be hashed.

Parameters

bool $shouldHashKeys

Return Value

void

protected mixed tooManyAttempts(string $key, int $maxAttempts, int $decaySeconds)

Determine if the given key has been "accessed" too many times.

Parameters

string $key
int $maxAttempts
int $decaySeconds

Return Value

mixed

protected Connection getRedisConnection()

Get the Redis connection that should be used for throttling.

Return Value

Connection

Laravel Cloud is the best place to deploy Laravel, Nuxt, Express, Hono, Node.js, Bun, Go, Flask, Python, and more, with dedicated infrastructure available on AWS through Laravel Private Cloud.