Я прочесываю голову на это более 2 часов. Я исследовал статьи на StackOverflow в том числе:PHP - password_verify issue
И я гавань была в состоянии исправить мою проблему. Я был бы признателен за некоторые рекомендации о том, сколько идиота я являюсь:
Функция для вставки данных в базу данных MySQL:
function insertUser($userObj) {
$query = $this->databaseConnection->getStntPrepare()->prepare(
"INSERT INTO user(username, userpassword) VALUES (?,?);");
$username = $userObj->getUsername();
$password = password_hash('testing1234', PASSWORD_BCRYPT);
$query->bind_param('ss', $username, $password);
}
Проверка входа пользователя путем извлечения данных из MySQL:
function findUser($userObj) {
$query = $this->databaseConnection->getStntPrepare()->prepare(
"SELECT userid, userpassword
FROM user
WHERE username=?");
$pass = 'testing1234'
$query->bind_param('s', $userObj->getUsername());
$query->execute();
$query->bind_result($userid, $hash);
while ($query->fetch()) {
if (password_verify($pass, $hash)) {
echo 'Password is valid!';
} else {
echo 'Invalid password.';
}
}
}
При запуске я получаю «Неверный пароль».
Когда я ниже, не вставляя в базу данных, то получение:
$hash = password_hash('testing1234', PASSWORD_BCRYPT);
if (password_verify('testing1234', $hash)) {
echo 'Password is valid!';
} else {
echo 'Invalid password.';
}
я получаю 'Пароль действителен!
Я считаю, что моя проблема связана с одинарными и двойными кавычками и интерпретацией знака доллара ($) в поле пароля как переменной вместо литерала (как предлагает одна из статей) при сохранении/извлечении из База данных MySQL - однако мне не удавалось решить проблему. Ниже хэш-значение 'testing1234':
$ 2y $ 10 $ 1/oQEuYX67n.U3usxH.7tenNq7hT2dKyBSIZsy5xR3W
Какой тип данных является полем 'userpassword' в базе данных? Какое значение вы видите, если вы 'echo $ hash' перед тем, как называть' password_verify() '? (Также: try 'echo strlen ($ hash)' ...) –
Хороший улов! Проблема варчара (40). Расширены и теперь отсортированы. Спасибо за помощь! –