Установить предел сброса пароля для периода c времени для пользователя базы данных Firebase - PullRequest
0 голосов
/ 04 мая 2020

Я хочу создать механизм для сброса пароля, используя Node JS и firebase. Профиль пользователя хранится в firebase auth.

Моя цель: из GUI, запрос пользователя на электронную почту для сброса пароля. Пользователь может запросить сброс пароля максимум 3 раза в течение 1 часа. Если он по-прежнему не получает сообщение об ошибке, он может запросить его снова через 1 час.

Я подумал о нескольких вариантах сделать это, но не уверен, какой из них лучше для хорошей производительности и безопасности. С моей точки зрения, мне нужно хранить два значения: номер запроса и время запроса. Я подумал о следующих способах сделать это:

  1. Создайте документ в firestore, чтобы сохранить эти два значения.
  2. Используйте customClaims пользователя firebase auth для поддержания этих двух значений.
  3. Используйте клиентские куки-файлы для запроса номеров и используйте customClaims для хранения времени запроса.

Я думал, что использование 1-го и 2-го вариантов приведет к нескольким операциям с использованием firebase. Которые в конечном итоге взимают с меня неоправданно большую стоимость операций чтения / записи. А третий вариант создаст лазейку.

Можете ли вы предложить лучший вариант или какой вариант выбрать из вышеперечисленного для реализации механизма сброса пароля, который позволяет избежать нескольких запросов от одного и того же пользователя в течение периода c время?

Спасибо.

1 Ответ

0 голосов
/ 04 мая 2020

Вы можете попытаться сохранить количество сбросов пароля в базе данных Firebase или даже сохранить историю этого. Когда пользователь просит сменить пароль, проверьте его последний сброс, и оператор if-else выполнит оставшуюся часть работы.

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

Сохраните время в виде метки времени. Метка времени теперь составляет около 1588570404. Получите временную метку в момент нажатия кнопки сброса и используйте if-else.

if(timeDifference <= 3600) {
//deny resetting as time since last reset is less than an hour
}
else {
//reset password
}

1 час составляет 3600 секунд, поэтому разница должна быть больше 3600 секунд. Вы можете добавить дополнительные условия, чтобы проверить, сколько раз пользователь менял пароль в течение последнего часа, как указано выше в коде.

Но вам нужно будет сбрасывать этот счет через каждые часы, так что удачи вам в этом. Может быть, вы можете сбросить его при выполнении проверок последнего сброса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...