używam PHP 5.4 z tego skryptu wstecznej kompatybilności: https://github.com/ircmaxell/password_compat/blob/master/lib/password.phpphp nie password_verify pracy z bazą danych
że nie powinno mieć znaczenia, chociaż, bo mogę dostać proces mieszającego i weryfikacji pracy w mojej funkcji rejestracji:
$hash = password_hash($pass, PASSWORD_DEFAULT);
echo $pass;
echo $hash;
if(password_verify($pass,$hash))
echo 'success';
else echo 'failure';
//success is always shown
//EXAMPLE INPUT
$pass = 'password';
//EXAMPLE OUTPUT
password$2y$10$JK1jumvvSIm/gP3fWE3k9O98MzvHKDRYCjRPBniYg9riACyQw7WYSsuccess
ale za każdym razem, gdy próbuję zapisać hasz w bazie danych MySQL, a następnie pobrać go do funkcji weryfikacji, zawsze kończy się niepowodzeniem. Oto moja funkcja logowanie:
function user_login($mysqli, $email, $pass){
$err_msg = 'login: '.$mysqli->error.' | '.$email;
if($stmt = $mysqli->prepare('SELECT password FROM users WHERE email=?')) :
if(!$stmt->bind_param('s', $email)) log_sql_error($err_msg);
if(!$stmt->execute()) log_sql_error($err_msg);
if(!$stmt->bind_result($hash)) log_sql_error($err_msg);
if($stmt->fetch() === FALSE) log_sql_error($err_msg);
if(!$stmt->close()) log_sql_error($err_msg);
//I can see that these values are identical to the ones
//echoed out in the registration function
echo $pass;
echo $hash;
if(password_verify($pass,$hash))
echo 'success';
else echo 'failure';
else : log_sql_error($err_msg);
endif;
}
//failure is always shown
//EXAMPLE INPUT
$pass = 'password';
//EXAMPLE OUTPUT
password$2y$10$JK1jumvvSIm/gP3fWE3k9O98MzvHKDRYCjRPBniYg9riACyQw7WYSfailure
My „password” kolumna ma tego typu danych: VARCHAR(255) NOT NULL
Brak błędów php pokazać się więc jedyne co mogę myśleć o to, że wartość hash nie jest sformatowana w w ten sam sposób, gdy wychodzi z bazy danych, kiedy wchodzi, ale kiedy echo wartości, wydają się być identyczne.
Jak inaczej mogę debugować ten/co jest nie tak z moim kodem?
Dzięki
UPDATE:
To na pewno ma coś wspólnego z kodowaniem:
$hardcode_hash = '$2y$10$JK1jumvvSIm/gP3fWE3k9O98MzvHKDRYCjRPBniYg9riACyQw7WYS';
echo $hash;
echo '<br/>';
echo $hardcode_hash;
echo '<br/>';
if($hash == $hardcode_hash)
echo 'success';
else echo 'failure';
//OUTPUT
$2y$10$JK1jumvvSIm/gP3fWE3k9O98MzvHKDRYCjRPBniYg9riACyQw7WYS
$2y$10$JK1jumvvSIm/gP3fWE3k9O98MzvHKDRYCjRPBniYg9riACyQw7WYS
failure
jaki sposób zmiany formy wartość SQL pasujące wyjście password_hash? Oto, co starałem:
(string)$hash
utf8_encode($hash)
jeśli robię:
$hash = settype($hash,"string");
if($hash == $hardcode_hash)
powraca prawda, ale password_verify($pass, $hash)
nadal zwraca false
, który obniża pytanie bez pozostawienia komentarza lub odpowiedzi? Nie pomocne ... – Cbas
Większość z tych dni :-) – user4166144
Możesz pokazać przykładowe wyjście '$ pass' i' $ hash'. Nikt nie może przetestować fragmentu kodu. – mario