[FAQ] Преобразование паролей при конвертации

Ответить
Woin
Сообщения: 436
Зарегистрирован: 28.12.2009
Вопрос:
Добрый день. Конвертировал базу 2.0.22 в RC7. После этого некоторые пользователи при вводе пароля получают такую фразу:
При обновлении конференции не удалось преобразовать ваш пароль. Вы можете запросить новый пароль. Если вы продолжаете испытывать трудности, то свяжитесь с администратором конференции.
Если в админке поменять данному пользователю пароль вручную, или поменять его ник на другой, это не помогает. Принудительное повторное подтверждение активации тоже ничего не меняет.

Ответ:
Такая ошибка существует по крайней мере в phpBB3RC7. Для исправления:
Открыть includes/ucp/ucp_activate.php
НАЙТИ

Код: Выделить всё

if ($update_password)
        {
            $sql_ary = array(
                'user_actkey'        => '',
                'user_password'        => $user_row['user_newpasswd'],
                'user_newpasswd'    => ''
            );

            $sql = 'UPDATE ' . USERS_TABLE . '
ЗАМЕНИТЬ НА

Код: Выделить всё

if ($update_password)
        {
            $sql_ary = array(
                'user_actkey'        => '',
                'user_password'        => $user_row['user_newpasswd'],
                'user_newpasswd'    => '',
                'user_pass_convert'     => 0,
            );

            $sql = 'UPDATE ' . USERS_TABLE . '
Затем выполнить следующий SQL-запрос:

Код: Выделить всё

UPDATE `phpbb_users` SET `user_pass_convert` = '0'
(измените префикс phpbb_ на соответствующий вашему форуму).

Источник http://www.phpbbguru.net/community/topic17200.html внешка

Woin
Сообщения: 436
Зарегистрирован: 28.12.2009
После конвертации форума не работают пароли на кириллице.
Предлагаю небольшой хак для решения проблемы.
файл includes/auth/auth_db.php
Найти:

Код: Выделить всё

 set_var($password_new_format, stripslashes($password_old_format), 'string');
Заменить:

Код: Выделить всё

set_var($password_new_format, stripslashes($password_old_format), 'string', true);
Найти:

Код: Выделить всё

if (md5($password_old_format) == $row['user_password'] || md5(utf8_to_cp1252($password_old_format)) == $row['user_password'])
Заменить:

Код: Выделить всё

  if (md5($password_old_format) == $row['user_password'] || md5(utf8_to_cp1252($password_old_format)) == $row['user_password'] || md5(iconv('utf-8','windows-1251',$password_old_format)) == $row['user_password'])
После этого пароли на кириллице воспринимаются нормально.
Для работы требуется поддержка iconv в php (как правило обычно включена).

Источник http://www.phpbbguru.net/community/topic17200.html внешка

Ответить