Intereting Posts
Проблема отображения ответов как часть последних комментариев автора к странице автора Создание массива поиска из нескольких таблиц Можно ли изменить пул по умолчанию? Как добавить связанное имя в структуре постоянной позиции? Как получить шаблон WordPress и запустить его? Доступ к базе данных WordPress MySQL через подключение к данным в Visual Studio 2010 с использованием C # is_search был вызван неправильно Каким типом являются шаблоны WP media-modal? создаст статическую папку в корневом каталоге, предназначенную для загрузки статического содержимого из cookieless домена? Тип тагирования страницы Как использовать плагин WP REST API и плагин OAuth Server для регистрации и входа? Какие URL-адреса активов приемлемы для установки «ванильного» MU? Каков правильный способ записи этого условного оператора? Каков правильный синтаксис добавления URL-адреса с помощью короткого кода для iframe? как перенаправить старые сообщения в блоге, когда изменяются постоянные ссылки

Проверьте правильность имени пользователя в пользовательской форме входа

Я использовал учебник Jeff Star для создания моей собственной формы входа в систему http://digwp.com/2010/12/login-register-password-code/ . Он отлично работает, но у меня есть одна проблема. В форме пароля сброса, если кто-то неправильно вводит свое имя пользователя (так, чтобы оно не проверялось), они получают ногами по умолчанию wp-login.php? Action = lostpassword с сообщением об ошибке.

Есть ли способ перенаправить на мою собственную страницу ошибок?

Благодаря!

Solutions Collecting From Web of "Проверьте правильность имени пользователя в пользовательской форме входа"

Код, который он разместил в этом учебнике (очень хороший BTW), отправляет форму в модуль «сбросить пароль», который перенаправляет на ошибку login.php, но вы можете изменить это и создать свой собственный на основе оригинала и добавить его на страницу шаблона, измените:

 <form method="post" action="<?php echo site_url('wp-login.php?action=lostpassword', 'login_post') ?>" class="wp-user-form"> <div class="username"> <label for="user_login" class="hide"><?php _e('Username or Email'); ?>: </label> <input type="text" name="user_login" value="" size="20" id="user_login" tabindex="1001" /> </div> <div class="login_fields"> <?php do_action('login_form', 'resetpass'); ?> <input type="submit" name="user-submit" value="<?php _e('Reset my password'); ?>" class="user-submit" tabindex="1002" /> <?php $reset = $_GET['reset']; if($reset == true) { echo '<p>A message will be sent to your email address.</p>'; } ?> <input type="hidden" name="redirect_to" value="<?php echo $_SERVER['REQUEST_URI']; ?>?reset=true" /> <input type="hidden" name="user-cookie" value="1" /> </div> </form> 

чтобы:

 <form method="post" action="<?php echo $_SERVER['REQUEST_URI']; ?>" class="wp-user-form"> <div class="username"> <label for="user_login" class="hide"><?php _e('Username or Email'); ?>: </label> <input type="text" name="user_login" value="" size="20" id="user_login" tabindex="1001" /> </div> <div class="login_fields"> <?php do_action('login_form', 'resetpass'); ?> <input type="submit" name="user-submit" value="<?php _e('Reset my password'); ?>" class="user-submit" tabindex="1002" /> <?php if (isset($_POST['reset_pass'])) { global $wpdb; $username = trim($_POST['user_login']); $user_exists = false; if (username_exists($username)) { $user_exists = true; $user_data = get_userdatabylogin($username); } elseif (email_exists($username)) { $user_exists = true; $user = get_user_by_email($username); } else { $error[] = '<p>' . __('Username or Email was not found, try again!') . '</p>'; } if ($user_exists) { $user_login = $user->user_login; $user_email = $user->user_email; // Generate something random for a password... md5'ing current time with a rand salt $key = substr(md5(uniqid(microtime())), 0, 8); // Now insert the new pass md5'd into the db $wpdb->query("UPDATE $wpdb->users SET user_activation_key = '$key' WHERE user_login = '$user_login'"); //create email message $message = __('Someone has asked to reset the password for the following site and username.') . "\r\n\r\n"; $message .= get_option('siteurl') . "\r\n\r\n"; $message .= sprintf(__('Username: %s'), $user_login) . "\r\n\r\n"; $message .= __('To reset your password visit the following address, otherwise just ignore this email and nothing will happen.') . "\r\n\r\n"; $message .= get_option('siteurl') . "/wp-login.php?action=rp&key=$key\r\n"; //send email meassage if (FALSE == wp_mail($user_email, sprintf(__('[%s] Password Reset'), get_option('blogname')), $message)) $error[] = '<p>' . __('The e-mail could not be sent.') . "<br />\n" . __('Possible reason: your host may have disabled the mail() function...') . '</p>'; } if (count($error) > 0) { foreach ($error as $e) { echo $e . '<br/>'; } } else { echo '<p>' . __('A message will be sent to your email address.') . '</p>'; } } ?> <input type="hidden" name="reset_pass" value="1" /> <input type="hidden" name="user-cookie" value="1" /> </div> </form> 

Ниже приведена обновленная версия кода из @bainternet с исправленными ошибками синтаксиса, предложением @Val и генератором ключей из wp-login.php 3.4.2:

 global $wpdb; $username = trim($_POST['user_login']); $user_exists = false; // First check by username if ( username_exists( $username ) ){ $user_exists = true; $user = get_user_by('login', $username); } // Then, by e-mail address elseif( email_exists($username) ){ $user_exists = true; $user = get_user_by_email($username); }else{ $error[] = '<p>'.__('Username or Email was not found, try again!').'</p>'; } if ($user_exists){ $user_login = $user->user_login; $user_email = $user->user_email; $key = $wpdb->get_var($wpdb->prepare("SELECT user_activation_key FROM $wpdb->users WHERE user_login = %s", $user_login)); if ( empty($key) ) { // Generate something random for a key... $key = wp_generate_password(20, false); do_action('retrieve_password_key', $user_login, $key); // Now insert the new md5 key into the db $wpdb->update($wpdb->users, array('user_activation_key' => $key), array('user_login' => $user_login)); } //create email message $message = __('Someone has asked to reset the password for the following site and username.') . "\r\n\r\n"; $message .= get_option('siteurl') . "\r\n\r\n"; $message .= sprintf(__('Username: %s'), $user_login) . "\r\n\r\n"; $message .= __('To reset your password visit the following address, otherwise just ignore this email and nothing will happen.') . "\r\n\r\n"; $message .= network_site_url("wp-login.php?action=rp&key=$key&login=" . rawurlencode($user_login), 'login') . "&redirect_to=".urlencode(get_option('siteurl'))."\r\n"; //send email meassage if (FALSE == wp_mail($user_email, sprintf(__('[%s] Password Reset'), get_option('blogname')), $message)) $error[] = '<p>' . __('The e-mail could not be sent.') . "<br />\n" . __('Possible reason: your host may have disabled the mail() function...') . '</p>'; } if (count($error) > 0 ){ foreach($error as $e){ echo $e . "<br/>"; } }else{ echo '<p>'.__('A message will be sent to your email address.').'</p>'; } . global $wpdb; $username = trim($_POST['user_login']); $user_exists = false; // First check by username if ( username_exists( $username ) ){ $user_exists = true; $user = get_user_by('login', $username); } // Then, by e-mail address elseif( email_exists($username) ){ $user_exists = true; $user = get_user_by_email($username); }else{ $error[] = '<p>'.__('Username or Email was not found, try again!').'</p>'; } if ($user_exists){ $user_login = $user->user_login; $user_email = $user->user_email; $key = $wpdb->get_var($wpdb->prepare("SELECT user_activation_key FROM $wpdb->users WHERE user_login = %s", $user_login)); if ( empty($key) ) { // Generate something random for a key... $key = wp_generate_password(20, false); do_action('retrieve_password_key', $user_login, $key); // Now insert the new md5 key into the db $wpdb->update($wpdb->users, array('user_activation_key' => $key), array('user_login' => $user_login)); } //create email message $message = __('Someone has asked to reset the password for the following site and username.') . "\r\n\r\n"; $message .= get_option('siteurl') . "\r\n\r\n"; $message .= sprintf(__('Username: %s'), $user_login) . "\r\n\r\n"; $message .= __('To reset your password visit the following address, otherwise just ignore this email and nothing will happen.') . "\r\n\r\n"; $message .= network_site_url("wp-login.php?action=rp&key=$key&login=" . rawurlencode($user_login), 'login') . "&redirect_to=".urlencode(get_option('siteurl'))."\r\n"; //send email meassage if (FALSE == wp_mail($user_email, sprintf(__('[%s] Password Reset'), get_option('blogname')), $message)) $error[] = '<p>' . __('The e-mail could not be sent.') . "<br />\n" . __('Possible reason: your host may have disabled the mail() function...') . '</p>'; } if (count($error) > 0 ){ foreach($error as $e){ echo $e . "<br/>"; } }else{ echo '<p>'.__('A message will be sent to your email address.').'</p>'; } 

Я все еще сталкивался с проблемами, когда ключ сброса не работал должным образом, ссылка в письме перенаправила меня на стандартную страницу сброса пароля с параметром URL, указывающим на проблему с ключом, поэтому я более внимательно следил за файлом wp-login.php и включил объект $ wp_hasher, это устранило проблему, и сброс пароля в письме теперь работает

 if (($_SERVER['REQUEST_METHOD'] === (string) 'POST') && (isset($_POST['reset_pass']))) { // Acccess global properties global $wpdb, $wp_hasher; // Variables $error_pass_reset = array(); $username = (string) trim($_POST['user_login']); $user_exists = (bool) false; // ---- USERNAME OR EMAIL EXISTS ---- // if (username_exists($username)) { $user_exists = (bool) true; $user = (object) get_user_by('login', $username); } // end if else if (email_exists($username)) { $user_exists = (bool) true; $user = (object) get_user_by('email', $username); } // end else if else { $error_pass_reset[] = '<p>Username or Email was not found, please try again.</p>'; } // end else // ---- USER EXISTS ---- // if ($user_exists === (bool) true) { // Variables $user_login = (string) $user -> user_login; $user_email = (string) $user -> user_email; // Generate password reset key if (empty($key)) { $key = (string) wp_generate_password(20, false); do_action('retrieve_password_key', $user_login, $key); // Create the $wp_hasher object if (empty($wp_hasher)) { require_once(ABSPATH . WPINC . '/class-phpass.php'); $wp_hasher = new PasswordHash(8, true); } // Reset key with hasher applied (MD5 has string output) $hashed = (string) time() . ':' . $wp_hasher -> HashPassword($key); // Insert the new key into the database $wpdb -> update( $wpdb -> users, array( 'user_activation_key' => $hashed ), array( 'user_login' => $user_login ) ); } // end if // Email message $message = (string) 'Someone requested that the password be reset for the following account:' . "\r\n\r\n" . get_option('siteurl') . "\r\n\r\n" . 'Username: ' . $user_login . "\r\n\r\n" . 'If this was a mistake, just ignore this email and nothing will happen.' . "\r\n\r\n" . 'To reset your password, visit the following address:' . "\r\n\r\n" . get_option('siteurl') . '/wp-login.php?action=rp&key=' . $key . '&login=' . $user_login . "\r\n"; // Send email if ((bool) false === wp_mail($user_email, get_option('blogname') . ' Password Reset', $message)) { $error_pass_reset[] = '<p>The e-mail could not be sent at this time.</p>' . "\n"; } // end if } // end if // Send the rest password email do_action('login_form', 'resetpass'); } // end if (($_SERVER['REQUEST_METHOD'] === (string) 'POST') && (isset($_POST['reset_pass'])))