Как безопасно реализовать сброс пароля на сайте
Рекомендую такой вариант:
1. Пользователь запрашивает восстановление пароля
2. Шлём ему на почту письмо со специальной ссылкой, содержащей токен
3. Пользователь переходит по ссылке из письма 
4. Сверяем токен, после чего авторизуем его и даем задать новый пароль
5. Сохраняем хеш пароля в БД

Тонкости:
 — Токен — достаточно длинная строка из случайных символов
 — У токена должен быть срок действия, например 1 час. Это обезопасит систему от перебора токенов
1. пользователь вводит мыло, вы отправляете туда ссылку со сгенереным токеном 
2. после перехода по ссылке из мыла или даете ввести новый пароль, или опять таки шлете на мыло заново сгенерированный пароль