Есть баг в работе сайта. Вверху сайта красная полоса. "Пожалуйста, обновите пароль для восстановления доступа к аккаунту. Мы отправили письмо с инструкциями на вашу почту . " Дело в том, что письмом сразу не воспользовался, а потом вообще удалил с почты. И соответствующая ссылка для смены пароля тоже канула в лету. А вот кнопки, выслать письмо с инструкцией повторно, нету. К счастью для себя я настраивал хранение удалённых писем в течении месяца и смог восстановить само письмо. При этом невозможно никуда написать, ни попросить о помощи. Как альтернатива только создание нового аккаунта, чтобы восстановить старый. Не раз облазил сайт, как обновить пароль так и не нашел. Прошу доведите функционал до ума, добавьте возможно запроса повторного письма. И возможность связи с модератором или ТП.
Меняйте пароль хотя бы раз в год, а лучше — раз в 3 месяца. Так ваш ящик всегда будет в безопасности. Чтобы выбрать надежный пароль, прочитайте наши советы.
Проблемы с изменением пароля
Не помню текущий пароль
В этом случае вы можете только восстановить доступ по номеру телефона, дополнительной почте или через службу поддержки. Подробнее о восстановлении доступа читайте в статье «Не помню пароль».
Нет кнопки «Изменить пароль»
Вы вошли в Mail.ru c почтовым ящиком другого сервиса: «Яндекс.Почты», Gmail, «Рамблера», Yahoo и так далее. Чтобы изменить пароль, перейдите в сервис, где регистрировали почтовый ящик, и измените пароль там.
Кнопка неактивна, под кнопкой надпись «Смена пароля запрещена администратором домена»
Вы вошли в почтовый ящик, расположенный на стороннем домене — скорее всего, вы пользуетесь рабочей почтой. Чтобы изменить пароль, обратитесь к администратору, который выдавал вам доступ к этой почте.
При смене пароля возникает ошибка
Напишите в службу поддержки и прикрепите, пожалуйста, скриншот возникающей ошибки. Это поможет быстрее разобраться в проблеме.
Здравствуйте уважаемый посетитель!
В предыдущей статье мы рассмотрели отправку email для восстановления логина учетной записи зарегистрированного пользователя. А сегодня посмотрим, как с использованием почты восстановить пароль.
Следует отметить, что алгоритм восстановления логина и пароля во многом схож. Однако, помимо общих операций, присутствующих в обоих случаях, при восстановлении пароля требуется предусмотреть дополнительные мероприятия, необходимые для обеспечения более высокой степени защиты восстанавливаемых данных.
А о том, чем это достигается, мы здесь подробно и рассмотрим. Но прежде чем к этому приступить, желательно ознакомиться с предыдущей статьей, в которой подробно рассказывается об аналогичных действиях, которые мы будем использовать и в данном случае.
- Алгоритм восстановления пароля учетной записи пользователя
- Формируем форму восстановления пароля
- Создаем обработчик формы
- Формируем страницу изменения пароля
- Проверяем работу созданного механизма восстановления пароля
- Исходные файлы сайта
Алгоритм восстановления пароля учетной записи пользователя
В предыдущей статье уже рассказывалось об алгоритме действий при восстановлении данных учетной записи пользователя. Сейчас сформулируем это в части, касающейся пароля, выделив пункты, которые дополнительно добавляются к ранее используемым при варианте с логином.
- Пользователь в предназначенную для восстановления пароля форму вводит свой адрес электронной почты, который ранее указал при регистрации.
- При отправке запроса в обработчике формы производится проверка наличия в базе данных введенного адреса. В зависимости от результата проверки дальнейшие действия происходят в следующем порядке:
- В случае, если такого адреса в базе данных нет, то об этом сообщается пользователю с предложением вновь ввести адрес и повторно отправить запрос.
- При нахождении адреса:
- Из базы данных извлекаются соответствующие адресу электронной почты имя и логин пользователя.
- Формируется одноразовый ключ доступа к восстановлению пароля.
- Сформированный одноразовый ключ доступа сохраняется в базе данных в записи, соответствующей данному пользователю.
- На указанный email отправляется письмо пользователю со ссылкой на страницу сайта для восстановления пароля (в ссылке в качестве GET-параметра включен одноразовый ключ доступа).
- При получении письма пользователь переходит по ссылке на страницу сайта, на которой в специальной форме меняет пароль на новый (изменение пароля возможно только при соответствующем ключе доступа и с правильно указанным пользователем логином).
- При изменении пароля происходит удаление ключа доступа, хранящегося в базы данных.
- В случае, если пользователь, или кто иной, попытается повторно изменить пароль по данной ссылке, то на странице сайта ему будет сообщено о несоответствии ключа доступа к изменению пароля и предложено вновь пройти процедуру его восстановления.
В данном случае после оправки пользователем запроса на восстановление пароля (пункт 1,2), при наличие в базе данных введенного адреса email (пункт 2,б), формируется одноразовый ключ (пункт 2,б,ii). Который сохраняется, как в базе данных (пункт 2,б,iii), так и вставляется в виде GET-параметра в ссылку почтового сообщения (пункт 2,б,iv).
Далее, в отличие от варианта восстановления логина, пользователю отправляется письмо не с самими данными, а со ссылкой на страницу сайта, на которой предоставляется возможность их восстановить (смена пароля на новый, пункт 2,б,v).
При этом, в целях безопасности пользователю дается право сделать это только один раз . Обусловлено это тем что после изменения пароля, ранее сохраненный в базы данных ключ (пункт 2,б,vi) удаляется, и в дальнейшем ссылка становится нерабочей (пункт 2,б,vii).
Таким образом алгоритм действий по восстановлению пароля мы разобрали, и теперь можно перейти к его реализации.
Формируем форму восстановления пароля
Форма для восстановления пароля предназначена точно для таких же целей, как и в предыдущем случае, а именно: для оправки пользователю электронного сообщения в соответствии введенным адресом email.
Поэтому и HTML-код ее будет полностью повторять ранее рассмотренный вариант. За исключением только адреса обработчика, указанного в атрибуте формы action.
Введите указанный при регистрации e-mail, на который будет выслано письмо, предназначенное для восстановления пароля.
Рис.1 HTML-код формы восстановления пароля
Как видно, здесь указан адрес /user/password/otpravka-email-dlya-vosstanovleniya-parolya.html (поз. 6), в соответствии с которым мы следующим шагом будем создавать файл обработчика формы.
А что касается размещения формы, то, как и в предыдущем случае, ее код мы поместим в поле "content" таблицы "url" базы данных, предназначенном для размещения основного содержания страниц сайта. Обусловлено это тем, что в отсутствии PHP-кода нет необходимости использовать для этого файл.
Ниже показан скриншот записи таблицы "url", соответствующей странице "Восстановление пароля", с размещенным в области основного содержания HTML-кодом данной формы.
Рис.2 Размещение формы восстановления пароля в таблице БД
Создаем обработчик формы
Так как в данном случае обработка формы и отправка email аналогична восстановлению логина, то и код обработчика в большой степени будет повторять ранее рассмотренный вариант. За исключением только тех строк, в которых в функционал обработчика добавляются дополнительные действия, соответствующие пунктам с 2,б,ii по 2,б,iv алгоритма.
Ниже приведен код, в котором добавленные и измененные строки выделены более светлым фоном по отношению к ранее используемым фрагментам обработчика формы восстановления логина.
//—-Скрипт отправки почты для восстановления пароля—-
use PHPMailerPHPMailerPHPMailer ; //Импорт классов PHPMailer в глобальное пространство имен. Они должны быть в верхней части скрипта, а не внутри функции
$email = $_POST[ "recovery-email" ]; //Получение из формы адреса email
$email = check_symbol ($email, "E-mail" , "1" , "/^[A-Z0-9._%+-]+@([A-Z0-9-]+.)+[A-Z]<2,6>z/i" ); //Вызов пользовательской функции проверки и обработки данных формы
$GLOBALS[ ‘alert’ ] = ‘Данные из формы не отправлены. Обнаружены следующие ошибки:
‘ .$GLOBALS[ ‘alert’ ];
include "alert.php" ; //Вывод сообщения об ошибке в диалоговом окне браузера
Введите повторно указанный при регистрации e-mail, на который будет выслано письмо, предназначенное для восстановления пароля.
$table = ‘orders’ ; //Присвоение переменной $table имени таблицы, в которой будет происходить поиск требуемой записи
$column = ‘client-email’ ; //Присвоение переменной $column имени поля, по значению которого будет производиться поиск
$value = $email; //Присвоение переменной $value значения адреса email пользователя
$data_bd = getLine ($table, $column, $value); //Вызов функции вывода одиночной стоки по заданному условию
$login = $data_bd[ ‘client-login’ ]; //Извлечение логина пользователя
$name = $data_bd[ ‘client-name’ ]; //Извлечение имени пользователя
$rand = mt_rand (); //Формирование случайного целого числа
$column = ‘rand’ ; //Присвоение переменной $column имени поля, в котором сохраняется случайное число
$value = $rand; //Присвоение переменной $value значения случайного числа
$column_1 = ‘client-email’ ; //Присвоение переменной $column_1 имени поля заданного условия
$value_1 = $email; //Присвоение переменной $value_1 значения заданного условия
$data_bd = rihgtOneColumnOneСondition ($table, $column, $value, $column_1, $value_1); //Вызов универсальной функции записи данных по заданному условию в одном поле (запись значения случайного числа $rand в поле ‘rand’)
$code_email = urlencode ($email); //Кодирование сроки, в которой все не цифробуквенные символы, кроме "-", "_" и "." заменяются знаком процента "%" с шестнадцатеричными числами
$link = ‘http://’ .$_SERVER[ ‘SERVER_NAME’ ]. ‘/user/password/izmenenie-parolya.html?mail=’ .$code_email. ‘&rand=’ .$rand; //Формирование ссылки с GET-параметрами адреса email (mail) и значением ключа доступа (rand)
require ‘PHPMailer/src/PHPMailer.php’ ; //Подключение библиотеки PHPMailer
$mail = new PHPMailer (); //Инициализация класса
$from = ‘admin@avtobezugona.ru’ ; //Адрес почты, с которой идет отправка письма
$to = $email; //Адрес получателя
$mail -> isSMTP (); //Применение протокола SMTP
$mail -> Host = ‘smtp.yandex.ru’ ; //Адрес почтового сервера
$mail -> SMTPAuth = true ; //Включение режима авторизации
$mail -> Username = ‘admin@avtobezugona.ru’ ; //Логин от доменной почты, подключенной к стороннему почтовому сервису (в данном случае в Яндекс.Почта)
$mail -> Password = ‘2MsDom78’ ; //Пароль от доменной почты
$mail -> SMTPSecure = ‘ssl’ ; //Протокол шифрования
$mail -> Port = ‘465’ ; //Порт сервера SMTP
$mail -> CharSet = ‘UTF-8’ ; //Кодировка
$mail -> setFrom ($from, ‘Авто без угона’ ); //Адрес и имя отправителя
$mail -> addAddress ($to, ‘Авто без угона’ ); //Адрес и имя получателя
$mail -> isHTML ( true ); //Установка формата электронной почты в HTML
$mail -> Subject = ‘Восстановление пароля’ ; //Тема письма (заголовок)
Вы запросили восстановление пароля от учетной записи на сайте "Авто без угона".
Для смены пароля, пожалуйста, перейдите по ссылке: .$link.
Если Вы не запрашивали восстановление пароля, и это письмо попало по ошибке, просто не реагируйте на него или удалите.
Письмо отправлено автоматически сервисом рассылки Авто без угона