Как можно ограничить количество попыток отправки запросов активации по электронной почте без необходимости записи какой-либо информации в базу данных?

Как ограничить количество повторных запросов на отправку письма активации при использовании ссылки с токеном twt, чтобы не хранить данные на сервере? Я думаю использовать uuid и записывать его в редис вместе с почтой или айдишником пользователя. Может быть есть другие способы решения данной задачи?
  • 13 октября 2023 г. 19:49
Ответы на вопрос 2
Вы правильно рассматриваете использование uuid в комбинации с редисом для ограничения количества попыток отправки запросов активации. 

Каждый раз, когда пользователь запрашивает отправку письма активации, генерируйте новый uuid и сохраняйте его вместе с адресом электронной почты или айдишником пользователя в редис. Задайте время жизни (TTL) для этих ключей, чтобы они автоматически удалялись через определенное время (например, через 24 часа).

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

Использование редиса прекрасно подходит для таких временных ограничений, так как он работает быстро и может автоматически удалять ключи после истечения их срока годности.

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