November 18, 2023

Регистрация, удаление. Авторизация, восстановление

Неавторизованный пользователь, зайдя на сайт, увидит в Header'е кнопку "Войти". При нажатии на нее - откроется модальное окно, в котором будет форма логина, в ней можно переключиться на форму регистрации.

Однако, если пользователь перейдет по ссылкам https://site.com/register или https://site.com/login, он попадет на отдельные страницы регистрации и авторизации, которые внешне стилизованы так же, как и модальное окно.

Регистрация & удаление

На странице должны присутствовать следующие поля:
ЛОГИН:ПОЧТА:ПАРОЛЬ:ПОВТОР ПАРОЛЯ:КАПЧА

После заполнения всех данных и нажатия кнопки "Зарегистрироваться", в правом верхнем углу появится следующее сообщение: "Письмо с ссылкой для подтверждения было отправлено. Если оно не появилось во входящих, проверьте папку спам." - Отлично, на этом этапе аккаунт можно считать зарегистрированным, так как его строчка уже появилась в БД. Письмо с ссылкой для подтверждения будет отправлено с адреса электронной почты "[email protected]".

На случай, если при регистрации письмо на электронную почту не пришло, там же будет возможность отправить его повторно. Однако, для повторной отправки письма необходимо разгадать КАПЧУ. В случае с входом, до подтверждения регистрации по ссылке из письма, при попытке входа будет появляться ошибка:

"Для входа необходимо подтвердить адрес электронной почты. Если вы не получили письмо, вы можете запросить новое".

При нажатии на "запросить новое" будет отправлено новое письмо.

Запрашивать новые письма можно каждые 120 секунд, и максимум до трех раз (включительно) в течение 60 минут. То есть фактически пользователь сможет запросить новое письмо два раза сразу после регистрации. После этого будет наложено ограничение на 60 минут с момента последнего запроса. Информация о пользователе будет отслеживаться с помощью телеметрии fingerprintjs.

При регистрации, каждому аккаунту будут изначально присваиваться два длинных уникальных хэша. Один из них будет использоваться для подтверждения регистрации и будет включен в ссылку, по которой пользователь сможет подтвердить свою учетную запись. Второй хэш будет использоваться для удаления аккаунта - ссылка с ним будет расположена внизу письма, и если пользователь перейдет по ссылке с этим хэшем, его учетная запись будет перемещена из основной базы данных аккаунтов в отдельную её область, где хранятся удаленные аккаунты. Для хэшей подтверждения/удаления также будет предусмотрена отдельная область в базе данных.

Такая же процедура будет применяться в случае, если аккаунт не будет подтвержден в течение 7 дней и будет автоматически удален, или если он будет удален администрацией через админ-панель (функция необратима и возможности восстановления НЕ БУДЕТ, чтобы ограничить доступ юзеру можно просто использовать бан).

Поскольку нет необходимости создавать новые и делать недействительными старые хэши подтверждения, чтобы избежать перегрузки базы данных из-за нежелательных действий некоторых пользователей, которые могут многократно запрашивать письма, хэши подтверждения будут оставаться неизменными. То есть, при запросе нового письма оно будет отправлено, но хэши подтверждения и удаления в ссылке письма останутся такими же, какие были изначально присвоены учетной записи при её регистрации.

Как упоминалось ранее, в нижней части письма будет также содержаться небольшое предупреждение с ссылкой на удаление аккаунта. При активации аккаунта через ссылку подтверждения, хэш для удаления будет помечен как "нерабочий", а хэш для подтверждения - как "использованный". Если пользователь перейдет по ссылке для удаления, как уже писалось выше, его учетная запись и связанная с ней информация, включая хэши подтверждения/удаления, будут перемещены из основной базы данных в отдельную её область, предназначенную для удаленных аккаунтов.

Текст предупреждения в письме будет следующим: "Не стоит беспокоиться, если этот запрос был отправлен не вами. Просто перейдите по этой ссылке, чтобы удалить свой аккаунт, либо просто проигнорируйте это письмо, и через 7 дней он будет удалён автоматически".

Несколько человек не могут зарегистрироваться с одним и тем же логином. Если данный логин уже существует в базе, то выдаст ошибку.

Логин несет в себе исключительно косметическую функцию.

Ошибка, если логин, который указал человек при регистрации, уже занят:

"данный логин уже используется, укажите другой"

Ошибка при переходе по несуществующей/ошибочной ссылке:

"К сожалению, вы пытаетесь воспользоваться недействительной ссылкой."

Ошибка при переходе по уже нерабочей (статус в БД) ссылке:

"Извините, но вы больше не можете воспользоваться этой ссылкой."

Ошибка при переходе по уже использованной ссылке:

"Извините, но ссылка, которой вы пытаетесь воспользоваться, уже была использована ранее."

Текст при переходе по рабочей ссылке для подтверждения:

"Благодарим вас за регистрацию.
Ваш электронный адрес успешно подтвержден.

Вы можете сами перейти на страницу входа или подождать Х секунд."

На месте Х будет отсчёт от 5 до 1, после чего на той же вкладке произойдёт редирект на страницу авторизации (/login)

Если кто-то попытается зарегистрироваться с уже используемым другим аккаунтом адресом электронной почты (при этом, логин должен быть не занят), вместо ошибки "пользователь с таким адресом электронной почты уже зарегистрирован" будет произведена обычная регистрация, которая будет выглядеть как успешная. Однако, вместо письма с ссылкой для подтверждения+удаления и создания строчки в базе данных, пользователю будет отправлено письмо(-а) с того же адреса электронной почты [email protected] со следующим содержанием:

"на ваш электронный адрес пытались зарегистрироваться. попытка не увенчалась успехом так как пользователь не может иметь более одной учётной записи на один адрес электронной почты, но мы подозреваем что это могли быть не вы. возможно, кто-то вас пытается деанонимизировать и преднамеренно пытается зарегистрироваться на ваш адрес чтобы узнать его причастность к учётной записи. кто бы это ни был, он этого не узнает, так как мы предусмотрели этот сценарий :) IP, с которого была попытка зарегистрироваться: 0.0.0.0 (Country, City). Агент пользователя: XXX"

Как упоминалось ранее, если аккаунт не будет подтвержден в течение 7 дней, он будет автоматически удален, чтобы избежать нагрузки на базу данных от аккаунтов, зарегистрированных на случайные адреса электронной почты, например, [email protected]. После удаления аккаунта на адрес электронной почты пользователя будет отправлено письмо о том, что аккаунт был удалён.

Авторизация & восстановление

На странице должны присутствовать следующие поля:
ПОЧТА:ПАРОЛЬ:КАПЧА

При вводе неверных данных, независимо от того, является ли неправильным логин или пароль, будет выводиться ошибка "Неправильный логин или пароль". Это делается для предотвращения связи между электронной почтой и аккаунтом при попытке деанонимизации наших пользователей или продавцов.

После трех неудачных попыток авторизации возможность входа для пользователя будет ограничена на 60 минут - пользователь будет определяться посредством телеметрии fingerprintjs. Даже если пользователь столкнулся с ограничением на регистрацию (трижды запросил письмо), ограничения на вход и восстановление пароля не будут применяться, по крайней мере, пока не будет достигнут лимит по ним.

Под полем для ввода пароля, после ввода логина, фраза "Забыли пароль?" станет кликабельной (до ввода логина она будет серой и неактивной). При нажатии на фразу будет отправлено письмо с ссылкой для восстановления.

При восстановлении пароля, независимо от того, зарегистрирован ли указанный логин у нас или нет, будет отображен следующий текст: "Если адрес [email protected] связан с учетной записью, вы получите ссылку для смены пароля." Если учетная запись с таким адресом электронной почты действительно существует в базе данных, будет отправлено письмо.

Повторно запросить письмо можно через 120 секунд и не более трех раз в течение 60 минут, включительно. Ссылка для восстановления пароля будет активной в течение 60 минут с момента создания в базе данных, после чего будет удалена. Если пользователь запросит все 3 письма, все 3 ссылки будут действительны в течение 60 минут, и так же по истечению будут удалены из базы данных, а использованные будут соответствующе помечены и информация о них будет перемещена в отдельную область базы данных (откуда и будет браться информация о том, что ссылка была использована).

Ошибка при переходе по несуществующей/ошибочной ссылке:

"К сожалению, вы пытаетесь воспользоваться недействительной ссылкой."

При переходе по устаревшей ссылке (истекла через 60 мин.) будет ошибка:

"Извините, но ссылка, которой вы пытаетесь воспользоваться, устарела."

Ошибка при переходе по уже использованной ссылке:

"Извините, но ссылка, которой вы пытаетесь воспользоваться, уже была использована ранее."

При переходе по действующей ссылке для восстановления пользователю будет предложено изменить пароль через окно "Новый пароль", где нужно ввести новый пароль, повторить его и ввести капчу. Нажатие кнопки "Сменить пароль" выполнит действие и перенаправит пользователя на страницу авторизации (/login).