Спасибо всем за ваши ответы, после того, как я запустил свой echo $ pass через каждую строку, я заметил, что в какой-то момент кода он меняется с исходного значения на другое, я проверил его снова и, по-видимому, переменную $ pass используется в файле dbconnect.php
, который включен в код, в котором есть настройки и настройки моей базы данных, он использует переменную $pass
для хранения пароля базы данных, вот что изменило значение пароля, я исправил $ pass для $ usrPass и все работало нормально.
Так что для любого, кто столкнется с этой проблемой в будущем и увидит ее, вот наиболее распространенные ошибки, которые приводят к password_verify()
неработоспособности:
- использование двойных кавычек при хранении значения хеша (
$hash = "$2$ds$fdajja...";
использование двойных кавычек заставляет PHP читать $2
$ds
и $fdajja...
как отдельные переменные, которые, вероятно, приведут к разрыву вашего кода, ИСПОЛЬЗУЙТЕ ОДИН КВОТЫ ВМЕСТО.
- выводит как хэш, так и введенные значения и убедитесь, что они совпадают с теми, которые были вставлены и сгенерированы во время
password_hash()
- если значение базы данных было другим (хеш), убедитесь, что тип ее столбца равен
varchar(256)
, хеш обычно имеет длину 60 символов, но функция хеширования часто улучшается, так что длина может увеличиться в будущем.
- если введенное значение было другим (пароль пользователя), убедитесь, что фильтрация не портит значение пароля, а также проверьте, имеет ли другая переменная то же имя, что и та, в которой вы храните пароль в
- Если password_verify ($ pass, password_hash ($ pass, PASSWORD_DEFAULT)) "работает", то проблема в том, что $ dpass не содержит того, что ожидается - в том числе не сгенерировано правильно (так, что оно содержит и почему это не так, как ожидалось?). Если это «не работает», то другая линия вызывает наблюдаемое поведение. Оба эти результата позволяют сосредоточиться на уточненном наборе проблем. Спасибо
user2864740
за указание на это.
РЕДАКТИРОВАТЬ: Ребята, функция фильтра паролей вообще ничего не сделала, потому что нечего было фильтровать, для тех из вас, кто не знаком с ней, функция в основном работает с входными параметрами, она работает как с входами GET, так и с POST, так как я все еще делаю бэкэнд, я использую GET для тестирования.