Есть несколько аспектов вашей проблемы,
Вам нужно истечение токена
Вам необходимо проверить, не был ли токен уже использованuser.
Решение:
Вы можете использовать Аутентификация JWT Spring Rest , чтобы сгенерировать токен с истекающим сроком действия, который автоматически истекает по истечении заданного времени, нет необходимости сохранятьэто где угодно.
Теперь, так как вам также необходимо проверить, был ли TOKEN уже использован, вы можете сохранить токен в базе данных как поле этого ПОЛЬЗОВАТЕЛЬСКОГО ОБЪЕКТА.Таким образом, каждый раз, когда пользователь перенаправляется обратно в конечную точку приложения из электронной почты, JWT автоматически проверяет, является ли TOKEN действительным и не истек ли он, и затем в качестве следующего шага вы также можете проверить, является ли тот же самый токен, который вы сохранили в db, прежде чем разрешить сброс пользователяих пароль.
В качестве последнего шага обязательно удалите этот токен из БД после того, как пользователь успешно сбросит пароль, поскольку это предотвратит повторное использование этого токена для восстановления пароля в течение срока действия.
Вы можете поработать над этим, чтобы настроить решение в соответствии с требованиями приложения, например, если вы хотите, чтобы пользователь был уведомлен, если кто-то попытался попытаться сбросить пароль, используя токен с истекшим сроком действия или уже использованный токен.