Я работаю над веб-приложением, используя Laravel, и я хотел бы знать, возможно ли ограничить попытки входа в систему, например, если какой-либо пользователь вводит неправильные учетные данные 3 раза, ему нужно подождать 10 минут, чтобы снова войти в систему. Если он / она использует неправильные учетные данные 5 раз, ему / ей нужно подождать 30 минут.
Спасибо за вашу помощь !
Для этого вы должны переопределить метод входа в LoginController.php.
Сначала определите два защищенных свойства для установки количества попыток и времени ограничения (в качестве первого условия).
protected $maxAttempts = 3;
protected $decayMinutes = 10;
Теперь переопределите метод входа в систему,
/**
* [login - ovveride login method form AuthenticatesUsers Traits]
* @param Request $request [Login Request]
* @return [type] [description]
*/
public function login(Request $request)
{
$this->validateLogin($request);
if (auth()->attempt(['email' => $request->email, 'password' => $request->password])) {
return redirect()->intended('home');
}else{
if ($this->hasTooManyLoginAttempts($request)) {
$key = $this->throttleKey($request);
$rateLimiter = $this->limiter();
$limit = [3 => 10, 5 => 30];
$attempts = $rateLimiter->attempts($key); // return how attapts already yet
if ($attempts >= 5)
{
$rateLimiter->clear($key);;
}
if (array_key_exists($attempts, $limit)){
$this->decayMinutes = $limit[$attempts];
}
$this->incrementLoginAttempts($request);
$this->fireLockoutEvent($request);
return $this->sendLockoutResponse($request);
}
$this->incrementLoginAttempts($request);
return $this->sendFailedLoginResponse($request);
}
}