Я не знаю, является ли это рекомендуемым подходом, но вы могли бы создать отдельную таблицу, как вы упомянули, и затем реализовать своего собственного поставщика членства. Таким образом, при сбросе пароля вы можете реализовать необходимые дополнительные функции.
Для второй части:
Я бы сгенерировал токен, читал о различных способах его генерации здесь . Вы можете сохранить токен с датой / временем, отправить по электронной почте ссылку пользователю с токеном как частью URL-адреса, после чего вы сможете сравнить его с количеством прошедшего времени, как только пользователь нажмет на него.