Вопрос или проблема
Как сделать проверку длины пароля в приведенном ниже коде, так как я новичок в php. Я хочу, чтобы пользователь установил пароль длиной как минимум 8 символов. Pass1 – это идентификатор пароля. Я пытался использовать приведенный ниже код, но он не дает никаких ошибок при валидации.
public static function plugin_activated() {
// Информация, необходимая для создания страниц плагина
$page_definitions = array(
'member-login' => array(
'title' => __( 'Войти', 'personalize-login' ),
'content' => '[custom-login-form]'
),
'member-account' => array(
'title' => __( 'Ваш аккаунт', 'personalize-login' ),
'content' => '[account-info]'
),
'member-register' => array(
'title' => __( 'Регистрация', 'personalize-login' ),
'content' => '[custom-register-form]'
),
'member-password-lost' => array(
'title' => __( 'Забыли пароль?', 'personalize-login' ),
'content' => '[custom-password-lost-form]'
),
'member-password-reset' => array(
'title' => __( 'Выберите новый пароль', 'personalize-login' ),
'content' => '[custom-password-reset-form]'
)
);
foreach ( $page_definitions as $slug => $page ) {
// Проверка, что страница еще не существует
$query = new WP_Query( 'pagename=" . $slug );
if ( ! $query->have_posts() ) {
// Добавить страницу, используя данные из приведенного выше массива
wp_insert_post(
array(
"post_content' => $page['content'],
'post_name' => $slug,
'post_title' => $page['title'],
'post_status' => 'publish',
'post_type' => 'page',
'ping_status' => 'closed',
'comment_status' => 'closed',
)
);
}
}
}
//
// ФУНКЦИИ ПЕРЕПРАВЛЕНИЯ
//
/**
* Перенаправляет пользователя на индивидуальную страницу входа вместо wp-login.php.
*/
public function redirect_to_custom_login() {
if ( $_SERVER['REQUEST_METHOD'] == 'GET' ) {
if ( is_user_logged_in() ) {
$this->redirect_logged_in_user();
exit;
}
// Остальные перенаправляются на страницу входа
$login_url = home_url( 'member-login' );
if ( ! empty( $_REQUEST['redirect_to'] ) ) {
$login_url = add_query_arg( 'redirect_to', $_REQUEST['redirect_to'], $login_url );
}
if ( ! empty( $_REQUEST['checkemail'] ) ) {
$login_url = add_query_arg( 'checkemail', $_REQUEST['checkemail'], $login_url );
}
wp_redirect( $login_url );
exit;
}
}
/**
* Перенаправляет пользователя после аутентификации, если возникли ошибки.
*
* @param Wp_User|Wp_Error $user Вошедший в систему пользователь или ошибки, возникшие во время входа.
* @param string $username Имя пользователя, используемое для входа.
* @param string $password Пароль, используемый для входа.
*
* @return Wp_User|Wp_Error Вошедший в систему пользователь или информация об ошибке, если ошибки имелись.
*/
public function maybe_redirect_at_authenticate( $user, $username, $password ) {
// Проверка, были ли ошибки найдены в фильтре аутентификации
if ( $_SERVER['REQUEST_METHOD'] === 'POST' ) {
if ( is_wp_error( $user ) ) {
$error_codes = join( ',', $user->get_error_codes() );
$login_url = home_url( 'member-login' );
$login_url = add_query_arg( 'login', $error_codes, $login_url );
wp_redirect( $login_url );
exit;
}
}
return $user;
}
/**
* Возвращает URL, на который пользователь должен быть перенаправлен после (успешного) входа в систему.
*
* @param string $redirect_to URL перенаправления.
* @param string $requested_redirect_to Запрашиваемый URL перенаправления, переданный в качестве параметра.
* @param WP_User|WP_Error $user Объект WP_User, если вход был успешным, иначе объект WP_Error.
*
* @return string URL перенаправления
*/
public function redirect_after_login( $redirect_to, $requested_redirect_to, $user ) {
$redirect_url = home_url();
if ( ! isset( $user->ID ) ) {
return $redirect_url;
}
if ( user_can( $user, 'manage_options' ) ) {
// Используйте параметр redirect_to, если он установлен, иначе перенаправьте на админскую панель.
if ( $requested_redirect_to == '' ) {
$redirect_url = admin_url();
} else {
$redirect_url = $redirect_to;
}
} else {
// Неадминистраторы всегда попадают на страницу своего аккаунта после входа
$redirect_url = home_url( 'member-account' );
}
return wp_validate_redirect( $redirect_url, home_url() );
}
public function redirect_after_logout() {
$redirect_url = home_url( 'member-login?logged_out=true' );
wp_redirect( $redirect_url );
exit;
}
public function redirect_to_custom_register() {
if ( 'GET' == $_SERVER['REQUEST_METHOD'] ) {
if ( is_user_logged_in() ) {
$this->redirect_logged_in_user();
} else {
wp_redirect( home_url( 'member-register' ) );
}
exit;
}
}
/**
* Перенаправляет пользователя на индивидуальную страницу "Забыл пароль?" вместо
* wp-login.php?action=lostpassword.
*/
public function redirect_to_custom_lostpassword() {
if ( 'GET' == $_SERVER['REQUEST_METHOD'] ) {
if ( is_user_logged_in() ) {
$this->redirect_logged_in_user();
exit;
}
wp_redirect( home_url( 'member-password-lost' ) );
exit;
}
}
/**
* Перенаправляет на страницу сброса пароля, или на страницу входа
* если возникли ошибки.
*/
public function redirect_to_custom_password_reset() {
if ( 'GET' == $_SERVER['REQUEST_METHOD'] ) {
// Проверка ключа / комбинации входа
$user = check_password_reset_key( $_REQUEST['key'], $_REQUEST['login'] );
if ( ! $user || is_wp_error( $user ) ) {
if ( $user && $user->get_error_code() === 'expired_key' ) {
wp_redirect( home_url( 'member-login?login=expiredkey' ) );
} else {
wp_redirect( home_url( 'member-login?login=invalidkey' ) );
}
exit;
}
$redirect_url = home_url( 'member-password-reset' );
$redirect_url = add_query_arg( 'login', esc_attr( $_REQUEST['login'] ), $redirect_url );
$redirect_url = add_query_arg( 'key', esc_attr( $_REQUEST['key'] ), $redirect_url );
wp_redirect( $redirect_url );
exit;
}
}
//
// ШОРТКОДЫ РЕНДЕРИНГА ФОРМ
//
/**
* Шорткод для рендеринга формы входа.
*
* @param array $attributes Атрибуты шорткода.
* @param string $content Текстовое содержимое для шорткода. Не используется.
*
* @return string Вывод шорткода
*/
public function render_login_form( $attributes, $content = null ) {
// Парсинг атрибутов шорткода
$default_attributes = array( 'show_title' => false );
$attributes = shortcode_atts( $default_attributes, $attributes );
if ( is_user_logged_in() ) {
return __( 'Вы уже вошли в систему.', 'personalize-login' );
}
// Передайте параметр перенаправления функциональности входа WordPress: по умолчанию,
// не указывайте перенаправление, но если действующий URL перенаправления был передан как
// параметр запроса, используйте его.
$attributes['redirect'] = '';
if ( isset( $_REQUEST['redirect_to'] ) ) {
$attributes['redirect'] = wp_validate_redirect( $_REQUEST['redirect_to'], $attributes['redirect'] );
}
// Сообщения об ошибках
$errors = array();
if ( isset( $_REQUEST['login'] ) ) {
$error_codes = explode( ',', $_REQUEST['login'] );
foreach ( $error_codes as $code ) {
$errors []= $this->get_error_message( $code );
}
}
$attributes['errors'] = $errors;
// Проверка, вышел ли пользователь
$attributes['logged_out'] = isset( $_REQUEST['logged_out'] ) && $_REQUEST['logged_out'] == true;
// Проверка, зарегистрировался ли пользователь
$attributes['registered'] = isset( $_REQUEST['registered'] );
// Проверка, запросил ли пользователь новый пароль
$attributes['lost_password_sent'] = isset( $_REQUEST['checkemail'] ) && $_REQUEST['checkemail'] == 'confirm';
// Проверка, обновил ли пользователь пароль
$attributes['password_updated'] = isset( $_REQUEST['password'] ) && $_REQUEST['password'] == 'changed';
// Отрисовка формы входа с использованием внешнего шаблона
return $this->get_template_html( 'login_form', $attributes );
}
/**
* Шорткод для рендеринга формы регистрации нового пользователя.
*
* @param array $attributes Атрибуты шорткода.
* @param string $content Текстовое содержимое для шорткода. Не используется.
*
* @return string Вывод шорткода
*/
public function render_register_form( $attributes, $content = null ) {
// Парсинг атрибутов шорткода
$default_attributes = array( 'show_title' => false );
$attributes = shortcode_atts( $default_attributes, $attributes );
if ( is_user_logged_in() ) {
return __( 'Вы уже вошли в систему.', 'personalize-login' );
} elseif ( ! get_option( 'users_can_register' ) ) {
return __( 'Регистрация новых пользователей в данный момент запрещена.', 'personalize-login' );
} else {
// Получаем возможные ошибки из параметров запроса
$attributes['errors'] = array();
if ( isset( $_REQUEST['register-errors'] ) ) {
$error_codes = explode( ',', $_REQUEST['register-errors'] );
foreach ( $error_codes as $error_code ) {
$attributes['errors'] []= $this->get_error_message( $error_code );
}
}
// Получение ключа рекапчи
$attributes['recaptcha_site_key'] = get_option( 'personalize-login-recaptcha-site-key', null );
return $this->get_template_html( 'register_form', $attributes );
}
}
/**
* Шорткод для рендеринга формы, используемой для инициации сброса пароля.
*
* @param array $attributes Атрибуты шорткода.
* @param string $content Текстовое содержимое для шорткода. Не используется.
*
* @return string Вывод шорткода
*/
public function render_password_lost_form( $attributes, $content = null ) {
// Парсинг атрибутов шорткода
$default_attributes = array( 'show_title' => false );
$attributes = shortcode_atts( $default_attributes, $attributes );
if ( is_user_logged_in() ) {
return __( 'Вы уже вошли в систему.', 'personalize-login' );
} else {
// Получаем возможные ошибки из параметров запроса
$attributes['errors'] = array();
if ( isset( $_REQUEST['errors'] ) ) {
$error_codes = explode( ',', $_REQUEST['errors'] );
foreach ( $error_codes as $error_code ) {
$attributes['errors'] []= $this->get_error_message( $error_code );
}
}
return $this->get_template_html( 'password_lost_form', $attributes );
}
}
/**
* Шорткод для рендеринга формы, используемой для сброса пароля пользователя.
*
* @param array $attributes Атрибуты шорткода.
* @param string $content Текстовое содержимое для шорткода. Не используется.
*
* @return string Вывод шорткода
*/
public function render_password_reset_form( $attributes, $content = null ) {
// Парсинг атрибутов шорткода
$default_attributes = array( 'show_title' => false );
$attributes = shortcode_atts( $default_attributes, $attributes );
if ( is_user_logged_in() ) {
return __( 'Вы уже вошли в систему.', 'personalize-login' );
} else {
if ( isset( $_REQUEST['login'] ) && isset( $_REQUEST['key'] ) ) {
$attributes['login'] = $_REQUEST['login'];
$attributes['key'] = $_REQUEST['key'];
// Сообщения об ошибках
$errors = array();
if ( isset( $_REQUEST['error'] ) ) {
$error_codes = explode( ',', $_REQUEST['error'] );
foreach ( $error_codes as $code ) {
$errors []= $this->get_error_message( $code );
}
}
$attributes['errors'] = $errors;
return $this->get_template_html( 'password_reset_form', $attributes );
} else {
return __( 'Недействительная ссылка для сброса пароля.', 'personalize-login' );
}
}
}
/**
* Функция действия, используемая для включения JavaScript-файла reCAPTCHA
* в конце страницы.
*/
public function add_captcha_js_to_footer() {
echo "<script src="https://www.google.com/recaptcha/api.js?hl=en"></script>";
}
/**
* Рендерит содержимое указанного шаблона в строку и возвращает его.
*
* @param string $template_name Имя шаблона для рендеринга (без .php)
* @param array $attributes PHP-переменные для шаблона
*
* @return string Содержимое шаблона.
*/
private function get_template_html( $template_name, $attributes = null ) {
if ( ! $attributes ) {
$attributes = array();
}
ob_start();
do_action( 'personalize_login_before_' . $template_name );
require( 'templates/' . $template_name . '.php');
do_action( 'personalize_login_after_' . $template_name );
$html = ob_get_contents();
ob_end_clean();
return $html;
}
//
// ОБРАБОТЧИКИ ДЕЙСТВИЙ ДЛЯ ФОРМ В ПРОЦЕССЕ
//
/**
* Обрабатывает регистрацию нового пользователя.
*
* Используется через хук действия "login_form_register", активированный на wp-login.php
* когда доступ к нему осуществляется через действие регистрации.
*/
public function do_register_user() {
if ( 'POST' == $_SERVER['REQUEST_METHOD'] ) {
$redirect_url = home_url( 'member-register' );
if ( ! get_option( 'users_can_register' ) ) {
// Регистрация закрыта, показать ошибку
$redirect_url = add_query_arg( 'register-errors', 'closed', $redirect_url );
} elseif ( ! $this->verify_recaptcha() ) {
// Проверка рекапчи не удалась, показать ошибку
$redirect_url = add_query_arg( 'register-errors', 'captcha', $redirect_url );
} else {
$email = $_POST['email'];
$first_name = sanitize_text_field( $_POST['first_name'] );
$last_name = sanitize_text_field( $_POST['last_name'] );
$result = $this->register_user( $email, $first_name, $last_name );
if ( is_wp_error( $result ) ) {
// Парсинг ошибок в строку и добавление их в качестве параметра перенаправления
$errors = join( ',', $result->get_error_codes() );
$redirect_url = add_query_arg( 'register-errors', $errors, $redirect_url );
} else {
// Успех, перенаправляем на страницу входа.
$redirect_url = home_url( 'member-login' );
$redirect_url = add_query_arg( 'registered', $email, $redirect_url );
}
}
wp_redirect( $redirect_url );
exit;
}
}
/**
* Инициализирует сброс пароля.
*/
public function do_password_lost() {
if ( 'POST' == $_SERVER['REQUEST_METHOD'] ) {
$errors = retrieve_password();
if ( is_wp_error( $errors ) ) {
// Найдены ошибки
$redirect_url = home_url( 'member-password-lost' );
$redirect_url = add_query_arg( 'errors', join( ',', $errors->get_error_codes() ), $redirect_url );
} else {
// Электронное письмо отправлено
$redirect_url = home_url( 'member-login' );
$redirect_url = add_query_arg( 'checkemail', 'confirm', $redirect_url );
if ( ! empty( $_REQUEST['redirect_to'] ) ) {
$redirect_url = $_REQUEST['redirect_to'];
}
}
wp_safe_redirect( $redirect_url );
exit;
}
}
/**
* Сбрасывает пароль пользователя, если форма сброса пароля была отправлена.
*/
public function do_password_reset() {
if ( 'POST' == $_SERVER['REQUEST_METHOD'] ) {
$rp_key = $_REQUEST['rp_key'];
$rp_login = $_REQUEST['rp_login'];
$user = check_password_reset_key( $rp_key, $rp_login );
if ( ! $user || is_wp_error( $user ) ) {
if ( $user && $user->get_error_code() === 'expired_key' ) {
wp_redirect( home_url( 'member-login?login=expiredkey' ) );
} else {
wp_redirect( home_url( 'member-login?login=invalidkey' ) );
}
exit;
}
if ( strlen( $_POST['pass1'] ) < 3 )
{
//пароли слишком короткие
$redirect_url = home_url( 'member-password-reset' );
$redirect_url = add_query_arg( 'error', 'password_reset_mismatch1', $redirect_url );
}
if ( isset( $_POST['pass1'] ) ) {
if ( $_POST['pass1'] != $_POST['pass2'] ) {
// Пароли не совпадают
$redirect_url = home_url( 'member-password-reset' );
$redirect_url = add_query_arg( 'key', $rp_key, $redirect_url );
$redirect_url = add_query_arg( 'login', $rp_login, $redirect_url );
$redirect_url = add_query_arg( 'error', 'password_reset_mismatch', $redirect_url );
wp_redirect( $redirect_url );
exit;
}
if ( empty( $_POST['pass1'] ) ) {
// Пароль пустой
$redirect_url = home_url( 'member-password-reset' );
$redirect_url = add_query_arg( 'key', $rp_key, $redirect_url );
$redirect_url = add_query_arg( 'login', $rp_login, $redirect_url );
$redirect_url = add_query_arg( 'error', 'password_reset_empty', $redirect_url );
wp_redirect( $redirect_url );
exit;
}
// Проверки параметров выполнены, сбросить пароль
reset_password( $user, $_POST['pass1'] );
wp_redirect( home_url( 'member-login?password=changed' ) );
} else {
echo "Неверный запрос.";
}
exit;
}
}
//
// ДРУГИЕ НАСТРОЙКИ
//
/**
* Возвращает текстовое содержимое для письма о сбросе пароля.
* Вызывается через фильтр retrieve_password_message.
*
* @param string $message Стандартное текстовое сообщение электронной почты.
* @param string $key Ключ активации.
* @param string $user_login Имя пользователя для пользователя.
* @param WP_User $user_data Объект WP_User.
*
* @return string Сообщение электронной почты для отправки.
*/
public function replace_retrieve_password_message( $message, $key, $user_login, $user_data ) {
// Создание нового сообщения
$msg = __( 'Здравствуйте!', 'personalize-login' ) . "\r\n\r\n";
$msg .= sprintf( __( 'Вы попросили сбросить пароль для вашей учетной записи, используя адрес электронной почты %s.', 'personalize-login' ), $user_login ) . "\r\n\r\n";
$msg .= __( "Если это была ошибка или вы не просили сбросить пароль, просто игнорируйте это электронное письмо, и ничего не произойдет.", 'personalize-login' ) . "\r\n\r\n";
$msg .= __( 'Чтобы сбросить пароль, посетите следующий адрес:', 'personalize-login' ) . "\r\n\r\n";
$msg .= site_url( "wp-login.php?action=rp&key=$key&login=" . rawurlencode( $user_login ), 'login' ) . "\r\n\r\n";
$msg .= __( 'Спасибо!', 'personalize-login' ) . "\r\n";
return $msg;
}
//
// ВСПОМОГАТЕЛЬНЫЕ ФУНКЦИИ
//
/**
* Проверяет и завершает процесс регистрации нового пользователя, если все прошло хорошо.
*
* @param string $email Адрес электронной почты нового пользователя
* @param string $first_name Имя нового пользователя
* @param string $last_name Фамилия нового пользователя
*
* @return int|WP_Error Идентификатор созданного пользователя или ошибка, если не удалось.
*/
private function register_user( $email, $first_name, $last_name ) {
$errors = new WP_Error();
// Адрес электронной почты используется как имя пользователя и электронная почта. Это также единственный
// параметр, который нам нужно проверить
if ( ! is_email( $email ) ) {
$errors->add( 'email', $this->get_error_message( 'email' ) );
return $errors;
}
if ( username_exists( $email ) || email_exists( $email ) ) {
$errors->add( 'email_exists', $this->get_error_message( 'email_exists') );
return $errors;
}
// Генерация пароля, чтобы подписчик должен был проверить электронную почту...
$password = wp_generate_password( 12, false );
$user_data = array(
'user_login' => $email,
'user_email' => $email,
'user_pass' => $password,
'first_name' => $first_name,
'last_name' => $last_name,
'nickname' => $first_name,
);
$user_id = wp_insert_user( $user_data );
wp_new_user_notification( $user_id, $password );
return $user_id;
}
/**
* Проверяет, что параметр reCAPTCHA, отправленный с запросом на регистрацию, действителен.
*
* @return bool True если CAPTCHA в порядке, иначе false.
*/
private function verify_recaptcha() {
// Это поле устанавливается виджетом рекапчи, если проверка проходит успешно
if ( isset ( $_POST['g-recaptcha-response'] ) ) {
$captcha_response = $_POST['g-recaptcha-response'];
} else {
return false;
}
// Проверка ответа CAPTCHA от Google
$response = wp_remote_post(
'https://www.google.com/recaptcha/api/siteverify',
array(
'body' => array(
'secret' => get_option( 'personalize-login-recaptcha-secret-key' ),
'response' => $captcha_response
)
)
);
$success = false;
if ( $response && is_array( $response ) ) {
$decoded_response = json_decode( $response['body'] );
$success = $decoded_response->success;
}
return $success;
}
/**
* Перенаправляет пользователя на правильную страницу в зависимости от того, является ли он администратором или нет.
*
* @param string $redirect_to Необязательный URL для перенаправления для администраторов
*/
private function redirect_logged_in_user( $redirect_to = null ) {
$user = wp_get_current_user();
if ( user_can( $user, 'manage_options' ) ) {
if ( $redirect_to ) {
wp_safe_redirect( $redirect_to );
} else {
wp_redirect( admin_url() );
}
} else {
wp_redirect( home_url( 'member-account' ) );
}
}
/**
* Находит и возвращает соответствующее сообщение об ошибке для данного кода ошибки.
*
* @param string $error_code Код ошибки для поиска.
*
* @return string Сообщение об ошибке.
*/
private function get_error_message( $error_code ) {
switch ( $error_code ) {
// Ошибки входа
case 'empty_username':
return __( 'У вас есть адрес электронной почты, верно?', 'personalize-login' );
case 'empty_password':
return __( 'Вам нужно ввести пароль для входа.', 'personalize-login' );
case 'invalid_username':
return __(
"У нас нет пользователей с таким адресом электронной почты. Возможно, вы использовали другой адрес при регистрации?",
'personalize-login'
);
case 'incorrect_password':
$err = __(
"Пароль, который вы ввели, неверен. <a href="%s">Забыли пароль?</a>?",
'personalize-login'
);
return sprintf( $err, wp_lostpassword_url() );
// Ошибки регистрации
case 'email':
return __( 'Адрес электронной почты, который вы ввели, недействителен.', 'personalize-login' );
case 'email_exists':
return __( 'Учетная запись существует с этим адресом электронной почты.', 'personalize-login' );
case 'closed':
return __( 'Регистрация новых пользователей в данный момент запрещена.', 'personalize-login' );
case 'captcha':
return __( 'Проверка Google reCAPTCHA не прошла. Вы робот?', 'personalize-login' );
// Забытый пароль
case 'empty_username':
return __( 'Вам нужно ввести свой адрес электронной почты, чтобы продолжить.', 'personalize-login' );
case 'invalid_email':
case 'invalidcombo':
return __( 'У нас нет зарегистрированных пользователей с этим адресом электронной почты.', 'personalize-login' );
// Сброс пароля
case 'expiredkey':
case 'invalidkey':
return __( 'Ссылка для сброса пароля, которую вы использовали, больше не действительна.', 'personalize-login' );
case 'password_reset_mismatch':
return __( "Два введенных вами пароля не совпадают.", 'personalize-login' );
case 'password_reset_mismatch1':
return __( "Два введенных вами пароля слишком короткие.", 'personalize-login' );
case 'password_reset_empty':
return __( "Извините, мы не принимаем пустые пароли.", 'personalize-login' );
default:
break;
}
return __( 'Произошла неизвестная ошибка. Пожалуйста, попробуйте снова позже.', 'personalize-login' );
}
//
// УСТАНОВКА ПЛАГИНА
//
/**
* Регистрирует поля настроек, необходимые плагину.
*/
public function register_settings_fields() {
// Создание полей настроек для двух ключей, используемых рекапчой
register_setting( 'general', 'personalize-login-recaptcha-site-key' );
register_setting( 'general', 'personalize-login-recaptcha-secret-key' );
add_settings_field(
'personalize-login-recaptcha-site-key',
'<label for="personalize-login-recaptcha-site-key">' . __( 'Ключ сайта reCAPTCHA' , 'personalize-login' ) . '</label>',
array( $this, 'render_recaptcha_site_key_field' ),
'general'
);
add_settings_field(
'personalize-login-recaptcha-secret-key',
'<label for="personalize-login-recaptcha-secret-key">' . __( 'Секретный ключ reCAPTCHA' , 'personalize-login' ) . '</label>',
array( $this, 'render_recaptcha_secret_key_field' ),
'general'
);
}
public function render_recaptcha_site_key_field() {
$value = get_option( 'personalize-login-recaptcha-site-key', '' );
echo '<input type="text" id="personalize-login-recaptcha-site-key" name="personalize-login-recaptcha-site-key" value="' . esc_attr( $value ) . '" />';
}
public function render_recaptcha_secret_key_field() {
$value = get_option( 'personalize-login-recaptcha-secret-key', '' );
echo '<input type="text" id="personalize-login-recaptcha-secret-key" name="personalize-login-recaptcha-secret-key" value="' . esc_attr( $value ) . '" />';
}
}
// Инициализация плагина
$personalize_login_pages_plugin = new Personalize_Login_Plugin();
// Создание индивидуальных страниц при активации плагина
register_activation_hook( __FILE__, array( 'Personalize_Login_Plugin', 'plugin_activated' ) );
if ( strlen( $_POST['pass1'] ) < 3 )
{
//пароли слишком короткие
$redirect_url = home_url( 'member-password-reset' );
$redirect_url = add_query_arg( 'error', 'password_reset_mismatch1', $redirect_url );
}
Я вижу, что вы проверяете, если длина пароля меньше 3. Я полагаю, вам нужно изменить 3
на 8
:
if ( mb_strlen( $_POST['pass1'] ) <= 8 )
// учтите, что strlen считает использованные байты, при этом специальные символы юникода
// занимают два байта.
// Таким образом, 'ÄÖÜß' удовлетворит условию strlen <= 8, чего вы не хотите.
// Поэтому лучше выбрать mb_strlen, который подсчитывает реальное количество
// символов!
{
//пароли слишком короткие
$redirect_url = home_url( 'member-password-reset' );
$redirect_url = add_query_arg( 'error', 'password_reset_mismatch1', $redirect_url );
}
Это то, чего вы хотите достичь?
Ответ или решение
Для того чтобы валидировать длину пароля в WordPress и установить минимальное требование на 8 символов, вам необходимо несколько изменений в вашем существующем коде. Давайте разберём это шаг за шагом.
Шаги для валидации длины пароля в WordPress
-
Измените проверку длины пароля на 8 символов.
В вашем исходном коде вы проверяете, меньше ли пароль 3 символов. Вам нужно изменить это на 8 символов, как показано ниже:if ( mb_strlen( $_POST['pass1'] ) < 8 ) { // Длина пароля слишком мала $redirect_url = home_url( 'member-password-reset' ); $redirect_url = add_query_arg( 'error', 'password_reset_mismatch1', $redirect_url ); wp_redirect( $redirect_url ); exit; // Прекращаем выполнение скрипта }
Используйте
mb_strlen()
вместоstrlen()
, чтобы правильно учитывать многобайтовые символы, такие как символы Unicode, которые могут занять больше одного байта. -
Убедитесь, что ошибки отображаются.
Убедитесь, что ошибкаpassword_reset_mismatch1
правильно обрабатывается и отображается на странице, чтобы пользователь понимал, почему его пароль не был принят. Например, изменение кода обработки ошибки:case 'password_reset_mismatch1': return __( "Пароль должен содержать минимум 8 символов.", 'personalize-login' );
-
Проверка на наличие всех необходимых полей.
Когда вы проверяете длину пароля, убедитесь, что переменная$_POST['pass1']
существует и не пуста. Это поможет избежать ошибок при попытке доступа к переменной, которая может не быть установлена:if ( isset( $_POST['pass1'] ) && mb_strlen( $_POST['pass1'] ) < 8 ) { // Длина пароля слишком мала $redirect_url = home_url( 'member-password-reset' ); $redirect_url = add_query_arg( 'error', 'password_reset_mismatch1', $redirect_url ); wp_redirect( $redirect_url ); exit; }
-
Добавьте валидацию на уровне формы.
Рассмотрите возможность добавления JavaScript валидации на клиентской стороне, чтобы пользователи сразу видели, если их пароль не соответствует минимальной длине. Это улучшит пользовательский опыт, уменьшив количество ошибок на серверной стороне.Пример простого JavaScript для проверки длины пароля:
<script> document.getElementById("resetPasswordForm").onsubmit = function() { var pass1 = document.getElementById("pass1").value; if (pass1.length < 8) { alert("Пароль должен содержать минимум 8 символов."); return false; // Предотвращает отправку формы } }; </script>
Заключение
Соблюдение безопасных стандартов паролей — это не просто рекомендация, это необходимость в современном веб-приложении. Убедитесь, что ваши требование пароля соответствуют лучшим практикам безопасности. Осуществление валидации на стороне сервера и клиента является хорошей практикой для установки минимальной длины пароля.
Помните, что это улучшает не только безопасность вашего приложения, но и общий пользовательский опыт!