Неработает восстановление пароля wordpress

Запись создана июня 12, 2008

В версии 2.5.1 популярного блогового движка WordPress появился неприятный баз с восстановлением паролей.

Симптомы: при запросе восстановления пароля приходит письмо с ссылкой подтверждения (ссылка всегда одна и таже), при клике на ссылку WordPress ругается «Извините, этот ключ неверен.»

Resolution: Вносим правки в два файла wp-login.php и /wp-includes/pluggable.php

$key = $wpdb->get_var($wpdb->prepare("SELECT user_activation_key FROM $wpdb->users WHERE user_login = %s", $user_login));
 if ( empty($key) ) {

Меняем на:

$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) {
 $key = wp_generate_password();

Меняем на:

 $key = wp_generate_password(20, false);

Правим файл: /wp-includes/pluggable.php

 function wp_generate_password($length = 12) {
     $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()";

меняем на:

function wp_generate_password($length = 12, $special_chars = true) {
     $chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
     if ( $special_chars )
        $chars .= '!@#$%^&*()';

» Запись из раздела wordpress | 7 комментариев

Комментарии



7 комментариев to “Неработает восстановление пароля wordpress”

  1. Jeurey on июня 17, 2008 4:54

    $wpdb->get_var($wpdb->prepare(«SELECT user_activation_key FROM $wpdb->users WHERE user_login = %s», $user_login));

    Сама идея включения переменной и последующего sprintf в строку является бредовой… В багрепорт чтоли отправить :)

  2. Leteatbee on августа 12, 2008 16:41

    В описании ошибка, при совершении всех замен в файле wp-login ошибка в строке 97
    do_action(‘retrieve_password_key’, $user_login, $key);

  3. admin on августа 12, 2008 18:58

    нет никакой ошибки, лично проверял на этом блоге.

  4. ws256 on апреля 19, 2011 16:43

    фигасе бага, у меня версия 3.1.1 и тоже такая фигня, но не увсех пользователей, не совсем понял причину, но надо лечить. А кроме правки файлов движка нету средств? Может плагин такой сделали уже?

  5. USER1 on марта 11, 2013 23:52

    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»;

  6. Марина on октября 21, 2013 16:09

    Возникла ошибка.

    preg_match(‘/[^a-z0-9]/i’,$key) != 0)

    после i надо поменять ’ на ‘

  7. find-way.net on августа 15, 2016 23:17

    Любовь, попробуйте через FTP отключить все плагины на сайте переименовав или удалив их директории. Если это не поможет с восстановлением пароля, то советую попробовать какой-нибудь другой из перечисленных методов.

садовый бордюр


Ответить