Solución:
El problema con su código es que está usando las comillas dobles "
en lugar de las comillas simples '
cuando se trata de tu hachís.
Al asignar:
$hash = "$2y$10$fXJEsC0zWAR2tDrmlJgSaecbKyiEOK9GDCRKDReYM8gH2bG2mbO4e";
Está haciendo que php piense que tienes una variable llamada $2y
y otro llamado $10
y finalmente un tercero llamado $fXJEsC0zWAR2tDrmlJgSaecbKyiEOK9GDCRKDReYM8gH2bG2mbO4e
. Que obviamente no es el caso.
Noté al encender el informe de errores que el error:
Aviso: Variable no definida: fXJEsC0zWAR2tDrmlJgSaecbKyiEOK9GDCRKDReYM8gH2bG2mbO4e
Estaba siendo lanzado por PHP.
Reemplace todas sus comillas dobles con comillas simples para corregir.
P.ej
$hash="$2y$10$fXJEsC0zWAR2tDrmlJgSaecbKyiEOK9GDCRKDReYM8gH2bG2mbO4e";
Trata todo el hash como una cadena literal en lugar de una cadena con variables incrustadas.
Tuve un problema similar con password_verify()
.
El error en mi caso, fue que he declarado mi campo de contraseña en la base de datos como varchar(30)
, pero el hash es igual o superior a 60 caracteres ..
Funciona bien para mi.
<?php
$hash=password_hash("rasmuslerdorf", PASSWORD_DEFAULT);
if (password_verify('rasmuslerdorf', $hash)) {
echo 'Password is valid!';
} else {
echo 'Invalid password.';
}
?>
PRODUCCIÓN:
¡La contraseña es válida!