Неработает восстановление пароля wordpress
Запись создана 12 июня, 2008
В версии 2.5.1 популярного блогового движка WordPress появился неприятный баз с восстановлением паролей.
Симптомы: при запросе восстановления пароля приходит письмо с ссылкой подтверждения (ссылка всегда одна и таже), при клике на ссылку WordPress ругается «Извините, этот ключ неверен.»
Resolution: Вносим правки в два файла wp-login.php и /wp-includes/pluggable.php
[cc lang=»php»]
$key = $wpdb->get_var($wpdb->prepare(«SELECT user_activation_key FROM $wpdb->users WHERE user_login = %s», $user_login));
if ( empty($key) ) {
[/cc]
Меняем на:
[cc lang=»php»]
$key = $wpdb->get_var($wpdb->prepare(«SELECT user_activation_key FROM $wpdb->users WHERE user_login = %s», $user_login));
if ( empty($key) || preg_match(‘/[^a-z0-9]/i’,$key) != 0) {
[/cc]
[cc lang=»php»]
$key = wp_generate_password();
[/cc]
Меняем на:
[cc lang=»php»]
$key = wp_generate_password(20, false);
[/cc]
Правим файл: /wp-includes/pluggable.php
[cc lang=»php»]
function wp_generate_password($length = 12) {
$chars = «abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()»;
[/cc]
меняем на:
[cc lang=»php»]
function wp_generate_password($length = 12, $special_chars = true) {
$chars = ‘abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789’;
if ( $special_chars )
$chars .= ‘!@#$%^&*()’;
[/cc]
Схожие темы
» Запись из раздела wordpress | 7 комментариев
Комментарии
7 комментариев to “Неработает восстановление пароля wordpress”
лайков в инстаграме платно от популярного сайтаОтветить
$wpdb->get_var($wpdb->prepare(«SELECT user_activation_key FROM $wpdb->users WHERE user_login = %s», $user_login));
Сама идея включения переменной и последующего sprintf в строку является бредовой… В багрепорт чтоли отправить :)
В описании ошибка, при совершении всех замен в файле wp-login ошибка в строке 97
do_action(‘retrieve_password_key’, $user_login, $key);
нет никакой ошибки, лично проверял на этом блоге.
фигасе бага, у меня версия 3.1.1 и тоже такая фигня, но не увсех пользователей, не совсем понял причину, но надо лечить. А кроме правки файлов движка нету средств? Может плагин такой сделали уже?
ws256, у меня версия 3.5.1. Был замечен такой же баг. Начал разбираться. Оказалось, в тексте письма к сылке добавлялся лишний символ «>», что портило переход по ссылке. Полечилось редактрованием wp-login.php, а именно строку 236:
$message .= ‘\r\n»;
Удаляем ненужные и получаем чистую ссылку
$message .= network_site_url(«wp-login.php?action=rp&key=$key&login=» . rawurlencode($user_login), ‘login’) . «\r\n»;
Возникла ошибка.
preg_match(‘/[^a-z0-9]/i’,$key) != 0)
после i надо поменять ’ на ‘
Любовь, попробуйте через FTP отключить все плагины на сайте переименовав или удалив их директории. Если это не поможет с восстановлением пароля, то советую попробовать какой-нибудь другой из перечисленных методов.