Package banner

Tests passing Laravel v8.x, v9.x, v10.x PHP 8

This package allows you to apply rate limiters to Laravel Livewire actions. This is useful for throttling login attempts and other brute force attacks, reducing spam, and more. ## Installation You can use Composer to install this package into your application: ``` composer require danharrin/livewire-rate-limiting ``` This package requires at least Laravel v8.x, when rate limiting improvements were introduced. This package is tested to support the `file` and `redis` cache drivers, but not `array`. ## Usage Apply the `DanHarrin\LivewireRateLimiting\WithRateLimiting` trait to your Livewire component: ```php rateLimit(10); } catch (TooManyRequestsException $exception) { throw ValidationException::withMessages([ 'email' => "Slow down! Please wait another {$exception->secondsUntilAvailable} seconds to log in.", ]) } // ... } } ``` ## API Reference ### Component Methods ```php use DanHarrin\LivewireRateLimiting\WithRateLimiting; /** * Rate limit a Livewire method, `$maxAttempts` times every `$decaySeconds` seconds. * * @throws DanHarrin\LivewireRateLimiting\Exceptions\TooManyRequestsException */ $this->rateLimit( $maxAttempts, // The number of times that the rate limit can be hit in the given decay period. $decaySeconds = 60, // The length of the decay period in seconds. By default, this is a minute. $method, // The name of the method that is being rate limited. By default, this is set to the method that `$this->rateLimit()` is called from. ); /** * Hit a method's rate limiter without consequence. */ $this->hitRateLimiter( $method, // The name of the method that is being rate limited. By default, this is set to the method that `$this->hitRateLimiter()` is called from. $decaySeconds = 60, // The length of the decay period in seconds. By default, this is a minute. ); /** * Clear a method's rate limiter. */ $this->clearRateLimiter( $method, // The name of the method that is being rate limited. By default, this is set to the method that `$this->clearRateLimiter()` is called from. ); ``` ### Exceptions ```php use DanHarrin\LivewireRateLimiting\Exceptions\TooManyRequestsException; try { $this->rateLimit(10); } catch (TooManyRequestsException $exception) { $exception->component; // Class of the component that the rate limit was hit within. $exception->ip; // IP of the user that has hit the rate limit. $exception->method; // Name of the method that has hit the rate limit. $exception->minutesUntilAvailable; // Number of minutes until the rate limit is lifted, rounded up. $exception->secondsUntilAvailable; // Number of seconds until the rate limit is lifted. } ``` ## Need Help? 🐞 If you spot a bug with this package, please [submit a detailed issue](https://github.com/danharrin/livewire-rate-limiting/issues/new), and wait for assistance. 🤔 If you have a question or feature request, please [start a new discussion](https://github.com/danharrin/livewire-rate-limiting/discussions/new). 🔐 If you discover a vulnerability within the package, please review our [security policy](https://github.com/danharrin/livewire-rate-limiting/blob/main/SECURITY.md).