#sql #database #login #password-recovery
#sql #База данных #аутентификация #восстановление пароля
Вопрос:
Я работаю над системой аутентификации. Он состоит из двух таблиц
UserRegistration // используется для временного хранения информации о пользователе, пока пользователь не проверит электронную почту
ID
-UserRegistrationID
-FirstName
-LastName
-emailId
-password
-dateTime
-activationCode
Аутентифицированные пользователи // Системные пользователи
-AuthUserID
-FirstName
-LastName
-emailId
-password
-dateTime
Noe я должен предоставить возможность восстановления пароля по электронной почте. Я должен отправить пользователю ссылку для восстановления.
Где хранить код ссылки восстановления в базе данных? Должен ли я создать отдельную таблицу для кода восстановления: RecoveryCode
-recoveryID //PK
-AuthUserID //FK
-recoveryCode
-dateTime //as the link is valid only for 24 hours.
Пожалуйста, предоставьте свои отзывы и предложения.
Спасибо!
Комментарии:
1. Простым ответом будет «ДА»
2. Например, используйте recoveryCode в таблице AuthenticatedUsers. Обычно нет необходимости в отдельных таблицах, таких как регистрация пользователей и аутентифицированные пользователи. Вместо этого используйте только пользователей.
3. Этот вопрос запрашивает самоуверенные ответы, и, следовательно, у него есть шанс быть закрытым как таковой. Тем не менее… Другой вариант — закодировать все необходимые данные в пути запроса и не использовать никаких дополнительных таблиц. Конечно, путь должен содержать некоторую контрольную сумму, чтобы предотвратить случайный доступ к другим учетным записям, и все соответствующие части должны быть скрыты.
Ответ №1:
В моем приложении код восстановления хранится в другой информации пользователя.
Это всего лишь токен, который действителен только один раз. Если пользователь нажимает на ссылку восстановления, он может изменить свой пароль. Токен восстановления сбрасывается при каждом изменении пароля (для которого аутентифицированным пользователям все еще требуется текущий пароль).
Но самое главное, токен восстановления должен храниться как пароль, то есть с сильным методом хэширования. Созданный токен (я использую UUID4) отправляется пользователю (как часть ссылки) и сохраняется в хешированном виде в базе данных.
Для этого ссылке нужен токен и что-то уникальное для пользователя (я нашел идентификатор пользователя в полном порядке). Нет необходимости в нескольких ссылках восстановления для одного пользователя. Поэтому просто сохраните один токен, который у вас есть, с другими пользовательскими данными.
Источник и дальнейшие мысли: palco.readthedocs.org .
Комментарии:
1. что вы думаете о новой таблице (назовем ее токенами) с такими столбцами: id, token, userId, createdAt.