Я ломал голову над этим более 2 часов. Я исследовал статьи о stackoverflow, в том числе:
И я не смог исправить свою проблему. Я был бы признателен за некоторые указания о том, насколько я идиот:
Функция для вставки данных в базу данных 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»:
$2г$10$1/oQEuYX67n.U3usxH.7tenNq7hT2dKyBSIZsy5xR3W
userpassword
в базе данных? Какое значение вы видите, если выecho $hash
непосредственно перед вызовомpassword_verify()
? (Также: попробуйтеecho strlen($hash)
...) - person Matt Gibson   schedule 10.11.2013