Пропустить

Проблема с восстановлением пароля

Проблемы с установкой или работой phpBB 3.0.x? Получите помощь здесь!
Свернуть Развернуть Правила форума Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ-3 (phpbb3) | Как задавать вопросы | Как устанавливать моды

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).

Проблема с восстановлением пароля

Сообщение Dudarik » 14.02.2010 21:44

Сразу хочу извиниться если такая тема уже существовала, ну а если существует то просто ткните меня носом где такое есть.

Вообщем обо всем по порядку.
Конвертировал базу в формат phpbb3, пришлось генерировать новые пароли для пользователей, проверил, все работает (дома установлен denwer). Переношу на хостинг, при попытке востановить пароль появляется сообщение: "Указанная информация о e-mail/имени пользователя не найдена." данные о пользователях естественно в базе есть, ибо, повторюсь, на домашнем PC все работает и все пароли высылаются на e-mail пользователя.

(на сервере)Сопоставление соединения с MySQL:utf8_unicode_ci
(дома)Сопоставление соединения с MySQL:cp1251_general_ci
Пробовал менять - результата нуль.
Все таблицы: utf8_bin

Скопировал часть скрипта из файла ucp_resend.php в отдельный файл:
<?php
//dumper() - функция для вывода на печать массивов.
define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
require($phpbb_root_path . 'common.' . $phpEx);
require($phpbb_root_path . 'includes/functions_user.' . $phpEx);
require($phpbb_root_path . 'includes/functions_module.' . $phpEx);
require("dumper.php");

$email="dudarik@yandex.ru";
$username="Alex";

$sql = 'SELECT user_id, username, user_email, user_jabber, user_notify_type, user_type, user_lang, user_inactive_reason
				FROM ' . USERS_TABLE . "
				WHERE user_email = '" . $db->sql_escape($email) . "'
					AND username_clean = '" . $db->sql_escape(utf8_clean_string($username)) . "'";
			$result = $db->sql_query($sql);
			$user_row = $db->sql_fetchrow($result);
			dumper($user_row);
?>

Что на сервере, что дома данные из базы выбираются корректно:
Array[8]
      user_id => "61"
      username => "Alex"
      user_email => "dudarik@yandex.ru"
      user_jabber => ""
      user_notify_type => "0"
      user_type => "0"
      user_lang => "ru"
      user_inactive_reason => "0"

Вообщем, прошу совета куда копать дальше?
Версия форума: чистая (без модов) 3.0.6.

Dudarik
phpBB 1.2.0
 
Сообщения: 17
Зарегистрирован: 26.01.2010 14:04
Откуда: Курган
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.

Re: Проблема с восстановлением пароля

Сообщение nissin » 14.02.2010 21:50

При переносе с localhost побилось поле username_clean, dump должен быть в кодировке utf8.
Всё повторяется. nurlan.info
Аватара пользователя
nissin
Поддержка
Поддержка
 
Сообщения: 1381
Зарегистрирован: 16.12.2007 15:01
Откуда: Павлодар
Благодарил (а): 1 раз.
Поблагодарили: 124 раз.

Re: Проблема с восстановлением пароля

Сообщение Dudarik » 14.02.2010 21:52

Нет :) , т.к. запускал на сервере скрипт который из поля username записывает данные в username_clean = utf8_clean_string($username)
К тому же тогда не работал бы вышенаписанный скрипт т.к.
 AND username_clean = '" . $db->sql_escape(utf8_clean_string($username)) . "'";

Dudarik
phpBB 1.2.0
 
Сообщения: 17
Зарегистрирован: 26.01.2010 14:04
Откуда: Курган
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.

Re: Проблема с восстановлением пароля

Сообщение nissin » 14.02.2010 22:37

На латинских символах проблем обычно и не возникает, только с русскими.
Проверьте ещё значение поле user_email_hash. Поскольку в 3.0.6 строка проверки выглядит так:
				WHERE user_email_hash = '" . $db->sql_escape(phpbb_email_hash($email)) . "'
					AND username_clean = '" . $db->sql_escape(utf8_clean_string($username)) . "'";

На всякий случай код функции phpbb_email_hash():
function phpbb_email_hash($email)
{
	return crc32(strtolower($email)) . strlen($email);
}
Всё повторяется. nurlan.info
Аватара пользователя
nissin
Поддержка
Поддержка
 
Сообщения: 1381
Зарегистрирован: 16.12.2007 15:01
Откуда: Павлодар
Благодарил (а): 1 раз.
Поблагодарили: 124 раз.

Re: Проблема с восстановлением пароля

Сообщение Dudarik » 14.02.2010 23:10

Я заметил что есть две функции ucp_resend.php и ucp_remind.php но судя из кода ucp.php:
case 'resend_act':
		$module->load('ucp', 'resend');
		$module->display($user->lang['UCP_RESEND']);
	break;

	case 'sendpassword':
		$module->load('ucp', 'remind');
		$module->display($user->lang['UCP_REMIND']);
	break; 

При восстановлении пароля вызывается функция remind, а не resend соответственно поле user_email_hash не проверяется, а вызывается код, который я написал в первом посте темы. Но и поле user_email_hash записывал с помощью функции phpbb_email_hash(). Сейчас сравнил хэши e-mail'ов на домашнем копьютере и на хостинге - абсолютно идентичны.

Dudarik
phpBB 1.2.0
 
Сообщения: 17
Зарегистрирован: 26.01.2010 14:04
Откуда: Курган
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.

Re: Проблема с восстановлением пароля

Сообщение nissin » 15.02.2010 9:45

Я честно не понимаю чего Вы упираетесь.
Медленно и печально распаковываем дистрибутив 3.0.6, открываем файл includes/ucp/ucp_remind.php. Ищем там текст SQL запроса:
			$sql = 'SELECT user_id, username, user_permissions, user_email, user_jabber, user_notify_type, user_type, user_lang, user_inactive_reason
				FROM ' . USERS_TABLE . "
				WHERE user_email_hash = '" . $db->sql_escape(phpbb_email_hash($email)) . "'
					AND username_clean = '" . $db->sql_escape(utf8_clean_string($username)) . "'";

Если Вам выдаётся ошибка, то какое-то значение неверно, либо очищенное имя пользователя либо хэш email.
Вы уверены, что у Вас версия 3.0.6?
Всё повторяется. nurlan.info
Аватара пользователя
nissin
Поддержка
Поддержка
 
Сообщения: 1381
Зарегистрирован: 16.12.2007 15:01
Откуда: Павлодар
Благодарил (а): 1 раз.
Поблагодарили: 124 раз.

Re: Проблема с восстановлением пароля

Сообщение Dudarik » 15.02.2010 12:27

nissin прошу прощения, действительно в версии 3.0.6 ucp_remind.php выглядет как вы и описали, я вчера, видимо по случайности, открыл скрипт форума phpbb 3.0.4.
Вообщем, как я понял (так оно и есть) хэш email генерируется в зависимости от домена (!). т.е. на разных доменах будет разный хэш одного и того же адреса e-mail.
Обновил хэши на хостинге:
$user_email_hash = $db->sql_escape(phpbb_email_hash($value));
	//echo $username_clean . '<br />';
	$sql = 'UPDATE ' . USERS_TABLE . " SET user_email_hash = '" . $user_email_hash . "' WHERE user_id = $key";
	$db->sql_query($sql); 

И все стало на свои места :)

nissin спасибо за помощь :)

Dudarik
phpBB 1.2.0
 
Сообщения: 17
Зарегистрирован: 26.01.2010 14:04
Откуда: Курган
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.

Re: Проблема с восстановлением пароля

Сообщение nissin » 15.02.2010 14:09

Хэш email на разных доменах одинаковый, он зависит только от email :)
Всё повторяется. nurlan.info
Аватара пользователя
nissin
Поддержка
Поддержка
 
Сообщения: 1381
Зарегистрирован: 16.12.2007 15:01
Откуда: Павлодар
Благодарил (а): 1 раз.
Поблагодарили: 124 раз.

Re: Проблема с восстановлением пароля

Сообщение Dudarik » 15.02.2010 17:10

Я понимаю, что вопрос решен, но все же мне просто интересно...
Действительно, генерация зависит только от e-mail, нашел место в функции user_add где, собственно, генерируется user_email_hash.
'user_email_hash' => crc32(strtolower($user_row['user_email'])) . strlen($user_row['user_email']), 

Однако на моем домашнем компе для e-mail'а "dudarik@yandex.ru" сгенерировался хэш "-80635440617", а на хостинге, для того же e-mail'а сгенерировался хэш "348861289017" - это обьясняется тем что у меня дома windows, а на сервере Linux ?

Dudarik
phpBB 1.2.0
 
Сообщения: 17
Зарегистрирован: 26.01.2010 14:04
Откуда: Курган
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.

Re: Проблема с восстановлением пароля

Сообщение rxu » 15.02.2010 17:30

Dudarik писал(а):сгенерировался хэш "-80635440617", а на хостинге, для того же e-mail'а сгенерировался хэш "348861289017" - это обьясняется тем что у меня дома windows, а на сервере Linux ?

А разрядность процессоров одинаковая?
Изображение
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
 
Сообщения: 7366
Зарегистрирован: 12.05.2006 18:16
Откуда: Красноярск
Благодарил (а): 2 раз.
Поблагодарили: 270 раз.

Re: Проблема с восстановлением пароля

Сообщение Dudarik » 15.02.2010 17:47

Хостинг:
Intel Core2Quad Q6600 2.4 GHz
ОС CentOS 5.x
Дома:
Athlon 64 X2 4200 (2,2GHz)
ОС WinXP (32 разрядная)

Dudarik
phpBB 1.2.0
 
Сообщения: 17
Зарегистрирован: 26.01.2010 14:04
Откуда: Курган
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.

Re: Проблема с восстановлением пароля

Сообщение rxu » 15.02.2010 18:07

Значит, на сервере 64-хразрядный линух, а дома 32-хразрядная винда. Поэтому и разный результат работы crc32().
Изображение
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
 
Сообщения: 7366
Зарегистрирован: 12.05.2006 18:16
Откуда: Красноярск
Благодарил (а): 2 раз.
Поблагодарили: 270 раз.

Re: Проблема с восстановлением пароля

Сообщение Dudarik » 15.02.2010 18:11

rxu
Ну я так и думал :)
nissin
rxu
Спасибо за ответы. Тему, думаю, можно закрывать :)

Dudarik
phpBB 1.2.0
 
Сообщения: 17
Зарегистрирован: 26.01.2010 14:04
Откуда: Курган
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.

Re: Проблема с восстановлением пароля

Сообщение nissin » 15.02.2010 19:03

rxu
Если это так, наверно нужно bugreport по этому поводу писать?
На предмет недопустимости использования crc32() для хеширования, поскольку это осознанная политика в php:
http://bugs.php.net/bug.php?id=39062
В общем отписал как сумел:
http://www.phpbb.com/bugs/phpbb3/ticket ... t_id=57755
Всё повторяется. nurlan.info
Аватара пользователя
nissin
Поддержка
Поддержка
 
Сообщения: 1381
Зарегистрирован: 16.12.2007 15:01
Откуда: Павлодар
Благодарил (а): 1 раз.
Поблагодарили: 124 раз.

Re: Проблема с восстановлением пароля

Сообщение rxu » 15.02.2010 19:17

nissin писал(а):Если это так, наверно нужно bugreport по этому поводу писать?

теоретически - да, но это уже известная разработчикам проблема.
Изображение
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
 
Сообщения: 7366
Зарегистрирован: 12.05.2006 18:16
Откуда: Красноярск
Благодарил (а): 2 раз.
Поблагодарили: 270 раз.

След.

Вернуться в Поддержка phpBB 3.0.х

 

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0

Бессрочный конкурс phpBB-ориентированных материалов
FastVPS — надёжный и доступный хостинг для phpBB
Место для вашей рекламы