Неработает восстановление пароля 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”

  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 отключить все плагины на сайте переименовав или удалив их директории. Если это не поможет с восстановлением пароля, то советую попробовать какой-нибудь другой из перечисленных методов.

как приобрести накрутку лайков в инстаграме платно от популярного сайта


Ответить