password_bcrypt - PHP y MYSQL: utilizando hash bcrypt y verificando la contraseña con la base de datos
password verify php (2)
Estoy usando el método del Sr. Andrew Moore ( ¿Cómo se usa bcrypt para contraseñas hash en PHP? ) De hash contraseña del usuario. Lo que hice es que tengo una página de registro y usa
$bcrypt = new Bcrypt(12);
$pass = $_POST[''password'']; //register password field
$hash= $bcrypt->hash($pass);
// then inserts $hash into database with users registered email (I''ve checked my mysql database and it indeed has an hashed item
Luego tengo una página de inicio de sesión, que consiste en campos de correo electrónico y contraseña. Mi idea es que las direcciones de correo electrónico son únicas en mi base de datos. Entonces, con eso en mente, hice un script donde la dirección de correo electrónico de los usuarios era primero y luego, si ya existía, verificaba la contraseña de hash con este
$bcrypt = new Bcrypt(12);
$email = $_POST[''email'']; //from login email field
$pass_l = $_POST[''password'']; // from login password field
$hash_1= $bcrypt->hash($pass_1);
$chk_email= $dbh->prepare("SELECT password FROM table WHERE email = ?");
$chk_email -> execute(array($email));
while($row = $chk_email->fetch(PDO::FETCH_ASSOC)){
$chk_pass = $row[''password'']; //inside a while loop to get the password
$pass_isGood = $bcrypt->verify($hash_1, $chk_pass);
var_dump($pass_isGood); // I''m getting false
}
No estoy seguro de lo que estoy haciendo mal, se supone que debo ser cierto. Y he configurado mi tablefield para text
o incluso varchar(256)
Así que solo para ser explícito y construir sobre la respuesta de @Michael (ya que estaba revisando la solución de Andrew Mooore también):
en lugar de esto:
$hash_1= $bcrypt->hash($pass_1);
$chk_pass = $row[''password'']; //inside a while loop to get the password
$pass_isGood = $bcrypt->verify($hash_1, $chk_pass);
necesitas esto:
$pass_l = $_POST[''password''];
$chk_pass = $row[''password'']; //inside a while loop to get the password
$pass_isGood = $bcrypt->verify($pass_l, $chk_pass);
//notice how 1st parameter of verify(is the text input and not its hashed form
Con la clase de Andrew Moore , debe llamar al método verify()
la clase para verificar que la contraseña del usuario coincida con el hash. Los dos parámetros que le pasa son la contraseña de texto simple que el usuario ingresó y el hash que almacenó en la base de datos.
Parece que pasaste una segunda contraseña hash para verify()
lugar, y es por eso que no está funcionando. Pase la contraseña de texto simple como primer argumento.