PHP - problem password_verify
Przez ponad 2 godziny drapałem się po głowie. Badałem artykuły na temat stackoverflow, w tym:
Problem z Bcrypt nie weryfikuje się poprawnie
php password_hash i password_verify nie pasują do siebie
Wywołanie `password_verify` zwraca wartość false dla poprawnego hasła
I nie byłem w stanie poprawić mojego problemu. Byłbym wdzięczny za wskazówki, jak bardzo jestem idiotą:
Funkcja wstawiania danych do bazy danych 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);
}
Weryfikacja logowania użytkownika poprzez pobieranie danych z 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.';
}
}
}
Po uruchomieniu otrzymuję „nieprawidłowe hasło”.
Kiedy wykonam poniższe czynności bez wstawiania do bazy danych, a następnie pobierania:
$hash = password_hash('testing1234', PASSWORD_BCRYPT);
if (password_verify('testing1234', $hash)) {
echo 'Password is valid!';
} else {
echo 'Invalid password.';
}
Otrzymuję „Hasło jest ważne!”
Uważam, że mój problem ma coś wspólnego z cudzysłowami pojedynczymi i podwójnymi oraz interpretacją znaku dolara ($) w polu hasła, jako zmiennej zamiast literału (jak sugeruje jeden z artykułów) podczas przechowywania / pobierania z bazy danych MySQL - Nie miałem szczęścia w rozwiązaniu. Poniżej znajduje się wartość skrótu „testing1234”:
2y $ 10 $ 1 $ / oQEuYX67n.U3usxH.7tenNq7hT2dKyBSIZsy5xR3W