У меня всегда была политика «, тем меньше плагинов лучше», поэтому, пожалуйста, не предлагайте плагин Login Tryempt, особенно если он не обновлялся в течение нескольких лет.WP вход в систему
Это, как говорится, я нашел этот фрагмент кода & добавила его functions.php
:
//Limit Login Attempts
if (! class_exists('limit_login_attempts')) {
class limit_login_attempts {
var $failed_login_limit = 3; //Number of authentification accepted
var $lockout_duration = 1800; //Stop authentification process for 30 minutes: 60*30 = 1800
var $transient_name = 'attempted_login'; //Transient used
public function __construct() {
add_filter('authenticate', array($this, 'check_attempted_login'), 30, 3);
add_action('wp_login_failed', array($this, 'login_failed'), 10, 1);
}
/**
* Lock login attempts of failed login limit is reached
*/
public function check_attempted_login($user, $username, $password) {
if (get_transient($this->transient_name)) {
$datas = get_transient($this->transient_name);
if ($datas['tried'] >= $this->failed_login_limit) {
$until = get_option('_transient_timeout_' . $this->transient_name);
$time = $this->when($until);
//Display error message to the user when limit is reached
return new WP_Error('too_many_tried', sprintf(__('<strong>ERROR</strong>: You have reached authentification limit, you will be able to try again in %1$s.') , $time));
}
}
return $user;
}
/**
* Add transient
*/
public function login_failed($username) {
if (get_transient($this->transient_name)) {
$datas = get_transient($this->transient_name);
$datas['tried']++;
if ($datas['tried'] <= $this->failed_login_limit)
set_transient($this->transient_name, $datas , $this->lockout_duration);
} else {
$datas = array(
'tried' => 1
);
set_transient($this->transient_name, $datas , $this->lockout_duration);
}
}
/**
* Return difference between 2 given dates
* @param int $time Date as Unix timestamp
* @return string Return string
*/
private function when($time) {
if (! $time)
return;
$right_now = time();
$diff = abs($right_now - $time);
$second = 1;
$minute = $second * 60;
$hour = $minute * 60;
$day = $hour * 24;
if ($diff < $minute)
return floor($diff/$second) . ' secondes';
if ($diff < $minute * 2)
return "about 1 minute ago";
if ($diff < $hour)
return floor($diff/$minute) . ' minutes';
if ($diff < $hour * 2)
return 'about 1 hour';
return floor($diff/$hour) . ' hours';
}
}
}
//Enable
new limit_login_attempts();
Он не отображает никаких сообщений, так что я понятия не имею сейчас, чтобы проверить, работает ли он должным образом.
Я никогда не пользовался WP_Error раньше, и документы были не очень полезны. Как и где должна выводиться эта ошибка?
- У меня есть передний конец логин, который не должен ничего менять, потому что он использует
autheniticate
иwp_login_failed
фильтр/действие, не так ли? - Это первый раз, когда я услышал о переходных процессах & Я читал, что это значение может быть не сохранено в базе данных. Проверено все равно - не там. не
- Нет ошибок
Почему он не работает? Немного советов о том, как отлаживать это сам, было бы также потрясающе.
Лучший способ сделать это - установить ограничение в среде Apache. – rnevius
Спасибо за комментарий. Знаете ли вы какие-либо хорошие ссылки или ссылки? (Я тоже пытаюсь найти его, не волнуйся.: P) Кроме того, он хорошо работает с WordPress? Я не очень разбираюсь в Apache или серверах в целом. – AWA