Project

General

Profile

Actions

Back-Feature #480

closed

Реализовать регистрацию пользователя по email и паролю с верификацией по email

Added by Алексей Подшиблов 20 days ago. Updated 9 days ago.

Status:
Closed
Priority:
Normal
Start date:
05/11/2026
Due date:
% Done:

0%

Estimated time:

Description

Реализовать регистрацию пользователя по email и пароль где пароль пользователь придумывает сам
Письмо с ссылкой для подтверждения email отправляется обязательно.
Без подтверждения email пользователь не может войти в систему.

Входные данные
{
"email": "",
"password": "password"
}

Логика
Проверить, существует ли пользователь с таким email.

Если email уже зарегистрирован и подтверждён - возвращаем ошибку

Если email свободен

  • Создать пользователя в БД.
  • Захешировать пароль
    Сгенерировать JWT-токен верификации

Отправить на email письмо с ссылкой для подтверждения(содержит токен)

Ответ при успехе
status 200 ok
{
"email": "",
"success": true
}

Actions #1

Updated by Алексей Подшиблов 18 days ago

  1. Пользователь отправляет на сервер запрос на регистрацию, передавая свой 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 Сервер возвращает пользователю успешный ответ

Actions #2

Updated by Алексей Подшиблов 9 days ago

  • Status changed from New to Closed
Actions

Also available in: Atom PDF