Уважаемые пользователи!
C 7 ноября 2020 года phpBB Group прекратила выпуск обновлений и завершила дальнейшее развитие phpBB версии 3.2.
С 1 августа 2024 года phpBB Group прекращает поддержку phpBB 3.2 на официальном сайте.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.2 до 31 декабря 2024 года.
С учетом этого, настоятельно рекомендуется обновить конференции до версии 3.3.

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

Проблемы с установкой или работой phpBB 3.3.x? Получите помощь здесь!
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Мини [FAQ] по phpBB 3.1.x/3.2.x | FAQ | Как задавать вопросы | Как устанавливать расширения

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Аватара пользователя
demonlibra
phpBB 2.0.2
Сообщения: 338
Стаж: 14 лет 6 месяцев
Откуда: Ростов-на-Дону
Благодарил (а): 24 раза
Поблагодарили: 38 раз

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

Сообщение demonlibra »

Обнаружилась проблема в работе функции восстановления пароля.

Сообщения восстановления пароля доставляются иногда. Закономерность определить не смог.
При этом тестовые сообщения и сообщения активации доставляются нормально.

Записи в журнале "Обслуживание" -> "Лог" -> "Лог ошибок" отсутствуют.
  • Пробовал php-mail через sendmail
  • Пробовал smtp.yandex.ru, smtp.inbox.ru и корпоративную почту на mail.nic.ru
  • Пробовал устанавливать чистый форум phpBB 3.3.8 на виртуальный сервер tmweb.ru
Сперва предположил, что проблема связана с недавним переносом форума с виртуального хостинга на виртуальный сервер tmweb.ru
Но такую же проблему обнаружил на другом своём форуме, который расположен на другом виртуальном хостинге nic.ru
О системах 
Все форумы phpBB 3.3.8

Виртуальный хостинг nic.ru
Сервер базы данных: MySQL(i) 5.6.51-91.0
Версия PHP: 7.4.29

Виртуальный сервер tmweb.ru
Сервер базы данных: MySQL(i) 8.0.31-0ubuntu0.22.04.1
Версия PHP: 8.1.2-1ubuntu2.6
В процессе поиска решения проблемы возникло два вопроса:
  1. С какой периодичностью разрешается запрашивать письмо восстановления пароля?
  2. Есть желание провести тесты с предыдущей версией phpBB. Где можно скачать phpBB 3.3.6 или 3.3.7 ?
  3. Можно ли как-то определить, что phpBB отправляет письма восстановления?
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16367
Стаж: 17 лет 11 месяцев
Откуда: Красноярск
Благодарил (а): 521 раз
Поблагодарили: 1744 раза

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

Сообщение rxu »

demonlibra писал(а): 31.10.2022 20:41 С какой периодичностью разрешается запрашивать письмо восстановления пароля?
1 сутки.
demonlibra писал(а): 31.10.2022 20:41 Где можно скачать phpBB 3.3.6 или 3.3.7 ?
https://download.phpbb.com/pub/release/3.3/
demonlibra писал(а): 31.10.2022 20:41 Можно ли как-то определить, что phpBB отправляет письма восстановления?
Видимо, по логам и содержимому папок майл-сервера.
Изображение
Аватара пользователя
demonlibra
phpBB 2.0.2
Сообщения: 338
Стаж: 14 лет 6 месяцев
Откуда: Ростов-на-Дону
Благодарил (а): 24 раза
Поблагодарили: 38 раз

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

Сообщение demonlibra »

Спасибо.
Такого большого срока я не ожидал и неверно трактовал результаты экспериментов.

Вдруг кому пригодится.
При запросе сброса пароля в таблицу 'phpbb_users' в строку пользователя, у которого совпал 'user_email', записываются:
  • 'reset_token' - ключ для сброса пароля, который добавляется в ссылку
    <адрес_форума>/app.php/user/reset_password?u=<user_id>&token=<reset_token>
  • 'reset_token_expiration' - время истечения срока действия ключа
    Очередной ключ не будет создан и письмо не будет отправлено, если 'reset_token_expiration' больше текущего времени time()
    Время хранится в форме Unix Time (количество секунд с 00:00:00 UTC 1 января 1970 года)
Операции прописаны в файле .../phpbb/ucp/controller/reset_password.php

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

// Do not create multiple valid reset tokens
				if (!empty($user_row['reset_token']) && (int) $user_row['reset_token_expiration'] >= time())
				{
					return $this->helper->message($message);
				}
...
...
...
// Generate reset token
				$reset_token = strtolower(gen_rand_string(32));

				$sql_ary = [
					'reset_token'				=> $reset_token,
					'reset_token_expiration'	=> strtotime('+1 day'),
				];

				$sql = 'UPDATE ' . $this->users_table . '
					SET ' . $this->db->sql_build_array('UPDATE', $sql_ary) . '
					WHERE user_id = ' . $user_row['user_id'];
				$this->db->sql_query($sql);

Вернуться в «Поддержка phpBB 3.3.x»