Как ограничить количество запросов на отправку письма активации не записывая нечего в базу данные?

Я отправляю на почту ссылку на активацию аккаунта. В этой ссылке twt токен с двумя полями. Первое это хэш из почты, id юзера, и секретного ключа который мы воссоздаем на сервере и сверяем с тем что был в ссылке. Вторая - почта юзера. Таким образом я сделал ссылку активации аккаунта без надобности хранения данных на сервере.

Только теперь не знаю как ограничить количество запросов на повторную отправку письма активации.

Можно записывать в редис, но тогда не будет смысла в том что все данные для проверки в ссылке уже есть.
Придется просто генерировать uuid и записывать его в редис с почтой или айдишником пользователя.

Дополнительно:

а какой вообще смысл в этой ссылке и переход по ней, если в бд ничего не записываешь / ничего не обновляешь ?

  • szQocks, изменить статус пользователя на активный. Но не храня данные о самой ссылке.
  • AvKa3003, понял, туплю

    Только теперь не знаю как ограничить количество запросов на повторную отправку письма активации.

    - просто нужно проверять активирован ли у него аккаунт, если нет - то только в этом случае отправлять ссылку на почту

  • szQocks, можно будет отправлять запросы на активацию сколько угодно раз хоть 10 раз в секунду. На всех сайтах есть ограничение минут в пять.
  • AvKa3003, + если имелось ввиду полное ограничение запросов то тут без помощи бд вряд ли конечно будет решение, или в крайнем случае можно ограничить по времени между запросами на уровне прокси например nginx для эндпоинта активации аккаунта, что бы через каждые N минут можно было только запрашивать запрос активации аккаунта и тогда бд не нужна будет
  • AvKa3003, короче либо через прокси как-то ограничить по времени эндпоинт, либо в бд записывать дату о том когда последний раз был запрос на активацию аккаунта, и сверять время + проверять не активирован ли аккаунт

    если аккаунт не активирован и время позволяет отправить ссылку на почту - отправлять

  • Хранить только один (самый последний) запрос на что-то там. Нормальный пользователь не должен запрашивать 10 одновременно работающих активаций...
  • Ответы:

    Добавь в ссылку время создания кода активации и огранич ее время жизни, т.е. лимит не на количество.

    Так же добавить к ссылке хеш 'от нее плюс секретную соль', или используй ассиметричное ее шифрование, чтобы не дать ее взломать

    • Так и сделано. Но это время жизни токена, а не таймаут на отправку новых писем.
    • Количество можно считать только записывая где то события

      Точно помню статью, где за такие вещи отвечал модуль nginx на lua, храня эти данные в памяти

     

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

     

      • Как ограничить количество запросов на отправку письма активации не записывая нечего в базу данные?Есть ответ
      • 07.04.2024
      Ответить

      Для ограничения количества запросов на отправку письма активации без записи данных в базу можно использовать сессии или куки. Вот пример реализации на PHP:

      session_start();
       
      if (!isset($_SESSION['activation_requests'])) {
          $_SESSION['activation_requests'] = 1;
      } else {
          $_SESSION['activation_requests']++;
      }
       
      if ($_SESSION['activation_requests'] > 3) {
          echo "Превышено количество запросов на отправку письма активации. Пожалуйста, подождите некоторое время перед повторной попыткой.";
      } else {
          // Код отправки письма активации
      }

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

      Таким образом, мы ограничиваем количество запросов на отправку письма активации без необходимости записи данных в базу.

    Оставить комментарий