Sometimes we need to restrict a user from submitting a form within a certain time limit that is to prevent spamming users. Do you know that we can handle it by using throttling. Think you want to restrict a user to submit a form only once in a timeframe of five minutes, now what you do?
This could be a public message board. If he/she tries to submit the form again in the next five minutes, they won’t be able to. How would you do that? To do that, we can create a new rule called ThrottleSubmission
using the following command like so.
Now let's check out laravel custom rules throttle
php artisan make:rule ThrottleSubmission
After runnig the command it will create a new class called ThrottleSubmission
in the app/Rules
directory. Here’s in the passes()
method, you can write the logic that will check if the user is submitting the form in 5 minutes multiple times like so.
app\Rules\ThrottleSubmission.php
namespace App\Rules;
use Illuminate\Contracts\Validation\Rule;
use App\User;
class ThrottleSubmission implements Rule
{
protected $user;
public function __construct(User $user)
{
$this->user = $user;
}
/**
* Determine if the validation rule passes.
*
* @param string $attribute
* @param mixed $value
* @return bool
*/
public function passes($attribute, $value)
{
return $this->user->latestMessage != null ? $this->user->latestMessage->created_at->lt(
now()->subMinutes(5)
): null;
}
/**
* Get the validation error message.
*
* @return string
*/
public function message()
{
return 'Try submitting after some time.';
}
}
Well, now Once done, you can attach this rule to a validator by passing an instance of the rule object with your other validation rules on the input field like so.
use App\Rules\ThrottleSubmission;
$request->validate([
'message' => [
'required',
'string',
new ThrottleSubmission
],
]);
Read also : How to Set Limit Login Attempts in Laravel 7
Hope it can help you.
#laravel #throttling #laravel-8x #limit-attempts