Каким требованиям должна отвечать форма восстановления доступа к своему аккаунту?
Пишу с нуля сайт, на котором имеется форма для напоминания логина и пароля от аккаунта (логин и пароль по задумке менять нельзя). Сейчас доделываю страницу, требующую указать почту, на которую зарегистрирована учётная запись, с той логикой, что на эту почту будет отправлено письмо с логином и паролем, а так же ссылка на страницу авторизации сайта. Задумался над тем, что должна содержать страница восстановления и какова её логика работы?
Нынче имеется:
1. Поле для ввода почты.
2. Поле для ввода капчи + изображения капчи + кнопка обновления капчи через AJAX.
3. Кнопка отправки данных.
Изначально кнопка отсылки данных неактивна (присвоен атрибут disabled). Когда вводится очередной символ (JQuery событие keyup) или теряется фокус (focusout), значение текстового поля капчи AJAX запросом отправляется PHP скрипту, который обрабатывает это значение. Когда ожидаемое значение оказывается равно действительному, то есть, возвращается некоторое значение, поле ввода капчи подсвечивается зелёным, иначе красным. При этом, когда вводится правильная капча, в PHP сессии (массиве) определяется переменная-флаг, сигнализирующая, что капча введена верно.
Похожий принцип у поля ввода почты. Если значение поля схоже по формату с почтовым адресом, то так же устанавливается схожий элемент сессии. Когда успешно устанавливается либо почта, либо капча, проверяется, успешно ли установлена вторая часть и тогда кнопка отправки разблокируется, иначе устанавливается блокировка.
Ещё я подумал и решил добавить в MySQL таблицу пользователей, у которых и считывается поле почты для отправки данных для восстановления, поле с последней отправкой письма. Так, если отправка произведена и записана в базу, далее попытаться восстановить данные можно только через 10 минут. Это сделано для того, чтобы не превысить лимит писем через PHP функцию mail.
После успешной отправки данных, браузер переходит на страницу авторизации с оповещением об успешной отправке почты. При не успешной - на эту же страницу восстановления, просто появляется сообщение, что учётной записи с такой почты нет. Если лимит отправлений исчерпан - так же переходит на страницу восстановления с соответствующим оповещением.
Итак, вопрос в том, правильно ли я запрограммировал логику и учёл ли всё необходимое для такой страницы?
MiiNiPaa: Логично вроде, что такая почта должна быть прописана в данных учётной записи, не так ли? Если вы туда впишете свою почту, вам это никак не поможет.
1. поле: почта или логин
2. капча
3. кнопка отправки
на сервере:
1. проверка периодичности отправки по IP, по юзеру/почте,
2. если верно - приходит письмо со ссылкой, содержащей хэш, для последующей смены пароля после перехода по ней. И никаких логинов и паролей в письме!
3. после перехода - проверяется сессия: если запрос пароля из этой сессии - СРАЗУ выполняется автоматический вход в систему с надписью, что "доступ восстановлен" и две кнопки (или линка): "перейти в ЛК" и "На главную", если сессия новая - предлагается ввести логин или почту (в зависимости от того, что было введено при запросе процедуры смены пароля изначально).
>> 2. если верно - приходит письмо со ссылкой, содержащей хэш, для последующей смены пароля после перехода по ней. И никаких логинов и паролей в письме!
Логин и пароль постоянны и смене не подлежат, таково условие, писал в тексте вопроса. Я тоже думал про эту идею, но особенность такова, что менять эти данные нельзя. Просто примите как факт.