La cosa es... Se supone que debes almacenar salado, hash contraseñas
en la base de datos Dado que estos son salados individualmente por usuario/contraseña, no puede buscarlos directamente con password = ?
, porque no conoce la sal y, por lo tanto, no puede calcular el hash correspondiente por adelantado. Si lo está haciendo correctamente, debe obtenga primero el registro de usuario por nombre de usuario, luego valide el hash de la contraseña usando el salt/hash recuperado. Pseudocódigo:
$user = fetch_from_database($_POST['username']);
if (!$user) {
throw new Exception("User doesn't exist");
}
if (!password_verify($_POST['password'], $user['password_hash'])) {
throw new Exception('Invalid password');
}
echo 'Welcome ', $user['name'];
Consulte http://php.net/password_hash , http://php.net/password_verify .