Помощь PHP с сбросом пароля и истечением срока действия токена

Я ищу, чтобы создать сценарий восстановления пароля php, используя токен, срок действия которого истекает через 24 часа, но я не уверен, как это сделать. У меня есть SHA1 зашифрованные пароли пользователей на данный момент, все, что я хочу сделать, я думаю, это добавить токен к URL-адресу, который отправляется пользователю, когда они запрашивают сброс пароля, но как я могу это сделать правильно и что делать? необходимо сохранить в базе данных?

  1. Когда пользователь запрашивает сброс пароля, генерирует токен и вычисляет дату его истечения
  2. Храните токен и дату его истечения в отдельных столбцах в таблице пользователей для этого пользователя.
  3. Отправьте электронное письмо пользователю, содержащему ссылку для сброса, с токеном, добавленным к его URL-адресу
  4. Когда ваш пользователь следует за ссылкой, возьмите маркер с вашего URL (возможно, с $_GET['token'] )
  5. Проверьте токен против таблицы пользователей
  6. Убедитесь, что срок его действия еще не истекает
    • Если он истек, аннулируйте его, возможно, очистив поля и разрешив пользователю повторно отправить
  7. Если токен действителен и полезен, отправьте пользователю форму сброса пароля
  8. Подтвердите и обновите пароль и очистите поля токена и истечения срока действия

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

 $token = sha1($user_id.$time.$user_pass.$salt).dechex(time()).dechex($user_id); $link = "http://".$domain."/restorepass/?token=$token"; 

Получив его, просто разделите и декодируйте его обратно, а затем проверьте хэш и тайм-аут.

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

Я бы это сделал, создав еще одну базу данных, называемую pessword_reset_sessions.

Чтобы вы могли сохранить следующее:

userid generalhash userhash timeinititated попытки

то с идентификатором пользователя вы указываете идентификатор пользователя obv, а общий хеш – это хэш, который НЕ отображается пользователю, а используется для создания userhash.

timeinitiated должна быть отметка времени UNIX, когда он сначала запросил новый пароль.

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

и выпустить электронное письмо, содержащее userhash.

когда хэш возвращается через $_GET['hash'] вы создаете еще один хэш из generalhash для сравнения с хешем, который приходит через $ _GET [], если хеш не совпадает, вы увеличиваете attempts

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