Я ищу, чтобы создать сценарий восстановления пароля php, используя токен, срок действия которого истекает через 24 часа, но я не уверен, как это сделать. У меня есть SHA1 зашифрованные пароли пользователей на данный момент, все, что я хочу сделать, я думаю, это добавить токен к URL-адресу, который отправляется пользователю, когда они запрашивают сброс пароля, но как я могу это сделать правильно и что делать? необходимо сохранить в базе данных?
$_GET['token']
) Я бы вообще не использовал базу данных. Но одностороннее шифрование.
Просто отправьте необходимую информацию в гиперссылку, содержащуюся в письме, подписанную хэшем. Что-то вроде этого
$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
вы также можете проверить, прежде чем убедиться, что он не отключил безопасность для двух попыток.