/v1/auth/magicLink
Параметр |
Значение |
Method |
POST |
Authorization |
- |
Query parameters |
- |
- При получении запроса по параметру rq.email найти пользователя в таблице Users, если не найден вернуть ошибку 404
- Сформировать AuthToken, записать его в Таблицу UserToken, обязательно должно быть сгенерировано время действия токена, опционально автоматическое удаление записей по заданному интервалу времени.
- вернуть в ответ статус 200 и tokenId
Пример запроса
{
"email": "[email protected]",
"RqUid": "d5ab3356-f4b4-11ea-adc1-0242ac120002",
}
Пример ответа
HTTPStatus.ok
{
"tokenId": "magic-link-jwt",
"RqUid": "d5ab3356-f4b4-11ea-adc1-0242ac120002",
}
/v1/email/sendMagicLink
Параметр |
Значение |
Method |
POST |
Authorization |
- |
Query parameters |
- |
- При получении запроса по параметру rq.email найти пользователя в таблице Users со статусом Approved, если не найден вернуть ошибку 404
- По параметру rq.tokenId найти токен в таблице UserToken, если не найден вернуть ошибку 404
- Проверить не протух ли токен, если протух вернуть ошибку 404
- Сформировать Magic Link с AuthToken
- Отправить Magic Link на email указанный в профиле найденного пользователя.
- вернуть в ответ статус 200
Пример запроса
{
"email": "[email protected]",
"tokenId": "magic-link-jwt",
"RqUid": "d5ab3356-f4b4-11ea-adc1-0242ac120002",
}
Пример ответа
HTTPStatus.ok
{
"RqUid": "d5ab3356-f4b4-11ea-adc1-0242ac120002",
}
/v1/auth/refresh
Параметр |
Значение |
Method |
POST |
Authorization |
- |
Query parameters |
- |
- Проверка валидности (подпись + время жизни) refresh jwt токена переданного в body refreshToken, если не валидный вернуть ошибку 401,
- При получении запроса осуществляет поиск токена переданного в body в таблице UserToken, если не найден вернуть ошибку 401,
- Проверяем что пользователь со статусом Approved, если не найден вернуть ошибку 401
- Генерируем AccessToken, RefreshToken
- Удалить запись из таблицы UserToken по переданному в body refreshToken
- Новый refreshToken записать в таблицу UserToken
- Вернуть в ответ accessToken и refreshToken
Пример запроса
{
"RqUid": "d5ab3356-f4b4-11ea-adc1-0242ac120002",
"refreshToken": "refresh-roken-jwt"
}
Пример ответа
{
"accessToken": "someAccessToken.In.JWTFormat",
"refreshToken": "someStringInBase64Format==",
"RqUid": "d5ab3356-f4b4-11ea-adc1-0242ac120002",
}
/v1/signup
Параметр |
Значение |
Method |
POST |
Authorization |
- |
Query parameters |
- |
- Получить из запроса поля
- Проверить, что почта - это почта,
- Отправить на почту ссылку для проверки почты, для этого сформировать токен для проверки почты - пункт опциональный
- В поле пароль заприсать Hash от переданного passwordHash
- создать запись в БД со статусом Awaiting
Пример запроса
{
"firstName": "",
"surame": "",
"middleName": "",
"username": "",
"imagePath":"",
"location":"",
"about": "",
"role":"",
"passwordHash": "",
}
Пример ответа
{
"firstName": "",
"surame": "",
"middleName": "",
"username": "",
"imagePath":"",
"location":"",
"about": "",
"role":""
}
/v1/password - Запрос на получение ссылки для установки пароля
Параметр |
Значение |
Method |
GET |
Authorization |
- |
Query parameters |
email |
- Получить запрос, извлечь email.
- По email найти пользователя в БД, если не найден вернуть ошибку 404
- Сгенерировать одноразовый токен для восстановления пароля,
- Сформировать email по шаблону восстановления пароля, с указанием токена
- Отправить письмо на email из профиля пользователя
api/v1/password - Запрос на установку пароля
Параметр |
Значение |
Method |
PUT |
Authorization |
- |
Query parameters |
- |
- Получить запрос, извлечь тело запроса
- Найти в БД пользователя по токену из запроса.
- Установить в поле passwordHash - hash от переданного пароля.
- В ответ передать статус 200 ok
Выбор алгоритма хеширования на усмотрение разработчика, реализующего функционал. Чисто, как предложение использовать алгоритм Bcrypt (16 round). ВАЖНО. При аутентификации пользователя по паролю должен использоваться тот же самый алгоритм хеширования.
Пример запроса
{
"passwordHash": "string", - с фронта должен быть передан Хеш от пароля введенного пользователем
"authToken":"string" - токен, сформированный для восстановления пароля.
}
Общее
Для писем должны быть реализованы шаблоны. В текущий момент шаблоны могут лежать на диске сервера приложений в какой либо папке, в будущем планируется перенос текста шаблонов в БД.