Back-Feature #480
closedРеализовать регистрацию пользователя по email и паролю с верификацией по email
0%
Description
Реализовать регистрацию пользователя по email и пароль где пароль пользователь придумывает сам
Письмо с ссылкой для подтверждения email отправляется обязательно.
Без подтверждения email пользователь не может войти в систему.
Входные данные
{
"email": "lapa@papa.com",
"password": "password"
}
Логика
Проверить, существует ли пользователь с таким email.
Если email уже зарегистрирован и подтверждён - возвращаем ошибку
Если email свободен
- Создать пользователя в БД.
- Захешировать пароль
Сгенерировать JWT-токен верификации
Отправить на email письмо с ссылкой для подтверждения(содержит токен)
Ответ при успехе
status 200 ok
{
"email": "lapa@papa.com",
"success": true
}
Updated by Алексей Подшиблов 18 days ago
- Пользователь отправляет на сервер запрос на регистрацию, передавая свой email и придуманный им пароль
2 Сервер проверяет, что email имеет правильный формат, а пароль не пустой и соответствует минимальным требованиям . Если данные не проходят проверку, сервер возвращает ошибку .
3 Сервер проверяет в базе данных, существует ли пользователь с таким email. Если пользователь найден и его email уже подтверждён, сервер возвращает ошибку, что аккаунт уже существует. Если пользователь найден, но email ещё не подтверждён, сервер удаляет этого пользователя и начинает процесс регистрации заново, как будто такого email не существует
4 Сервер создаёт новую запись в базе данных. В записи сохраняется email, хешированный пароль, дата создания, дата обновления и статус подтверждения email
5 Сервер генерирует JWT-токен для подтверждения email. Внутрь токена помещается идентификатор созданного пользователя, отметка о том, что этот токен предназначен именно для подтверждения email, а также время создания и время истечения
6 Сервер формирует ссылку для подтверждения email. Он берёт из настроек базовый адрес эндпоинта подтверждения и добавляет к нему сгенерированный токен в качестве параметра запроса
7 Сервер отправляет письмо на указанный пользователем email. В письме содержится просьба подтвердить регистрацию и ссылка
8 Если письмо не удалось отправить по какой-либо причине, сервер удаляет только что созданного пользователя из базы данных и возвращает пользователю ошибку с сообщением, что письмо не может быть отправлено, и просьбой повторить попытку позже. Если письмо отправлено успешно, сервер возвращает ответ, что регистрация прошла успешно и письмо отправлено.
9 Пользователь переходит по ссылке из письма. Браузер открывает адрес с эндпоинтом подтверждения и токеном в параметрах.
10 Сервер получает токен из параметров запроса. Если токен отсутствует, сервер возвращает ошибку, что токен не указан.
11 Сервер расшифровывает и проверяет токен. Он проверяет, что подпись токена корректна, что срок его действия не истёк и что он предназначен именно для подтверждения email. Если токен не проходит проверку, сервер возвращает ошибку, что токен недействителен или истёк.
12 Сервер извлекает из токена идентификатор пользователя и находит в базе данных пользователя с таким идентификатором. Если пользователь не найден, сервер возвращает ошибку, что пользователь не существует.
13 Сервер проверяет текущий статус подтверждения email у найденного пользователя. Если email уже был подтверждён ранее, сервер возвращает ответ, что email уже подтверждён, и не вносит никаких изменений в базу данных.
14 Сервер обновляет статус пользователя в базе данных устанавливает отметку, что email подтверждён, меняет роль пользователя с гостя на обычного пользователя и обновляет дату последнего изменения записи.
15 Сервер возвращает пользователю успешный ответ