Problemas con Password_Verify

Iniciado por lauro, 7 Mayo 2021, 18:11 PM

0 Miembros y 1 Visitante están viendo este tema.

lauro

Hola buenas !! tengo problemas con password_verify no encuentro cula es el problema
si alguen me puede ayudar. Gracias

no Compara bien el password que viene de la base de datos con la variable que viene del $_POST['password'].

En la base de datos ya puse varchar 255 caracteres

salta el Buble if pass_verify y dice que las contrseña no coincide

Código (php) [Seleccionar]
<?php
// Inicializando la Session 
session_start();
if(isset(
$_SESSION['usuarios']) && $_SESSION['usuarios'] === true)
{
    
header("location: Roles.php");
    exit;
}
include 
"conexion.php";

$usuario $password "";
$usuario_err $password_err "";

if(
$_SERVER["REQUEST_METHOD"] === "POST")
{
    if(empty(
trim($_POST['usuario'])))
    {
        
$usuario_err "Ingrese un Usuario";
    }else
        {
            
$usuario trim($_POST['usuario']);
        }

    if(empty(
trim($_POST['password'])))
    {
        
$password_err "Ingrese un password";
    }else
        {
            
$password trim($_POST['password']);
        }


    
// Validar credenciales

    
if(empty($usuario_err) && empty($password_err))
    {
        
$sql "SELECT login_id, login_usuario, login_password FROM login WHERE login_usuario = ?";

        if(
$stmt mysqli_prepare($con$sql))
        {
            
mysqli_stmt_bind_param($stmt"s"$param_usuario);
           
                
$param_usuario $usuario 

                if(
mysqli_stmt_execute($stmt))
                {
                    
mysqli_stmt_store_result($stmt);

                    if(
mysqli_stmt_num_rows($stmt) == 1)
                    {
                        
mysqli_stmt_bind_result($stmt$id$usuario$password1);
                        
                        if(
mysqli_stmt_fetch($stmt))
                        {
                            
$pass_verify password_verify($password$password1);
                                echo 
"pass es: ".$password;

                                echo 
"<br>";

                                echo 
"pass_hashed es: ".$password1;
                            if(
$pass_verify === true)
                            {
                                
session_start();

                                
//variables de session

                                
$_SESSION['usuarios'] = true;
                                
$_SESSION['id'] = $id;
                                
$_SESSION['usuario'] = $usuario;
                                
                               
header('location: Roles/usuario_nuevo.php');

                            }else
                                {
                                   
$password_err "La Contraseña es Incorrecta";
                                }
                        }
                    }else
                        {
                            
$usuario_err "Nombre de Usuario no Registrado";
                        }

                }

                    
        }
    }
       
}


esta el la otra parte del codifo donde cifra la contrseña y la la guarda en la base de datos



Código (php) [Seleccionar]
if(empty($usuario_err) && empty($correo_err) && empty($password) && empty($password2))
   {
        $password1 = password_hash ($password, PASSWORD_DEFAULT);

       $sql = "INSERT INTO login (login_usuario, login_correo, login_password) VALUES ('$usuario', '$correo', '$password1')";
       
       $ejec = mysqli_query($con,$sql);

           if($ejec)
           {
              header('Location: Inicio Sesion.php');
           }
   
   }
 
}

mchojrin

¿Qué resultado te da este código?


$pass_verify = password_verify($password, $password1);
echo "pass es: ".$password;

echo "<br>";

echo "pass_hashed es: ".$password1;
Ayudo a desarrolladores PHP a acceder a puestos mejor remunerados

lauro

Muestran esto en pantalla:

pass es: 1234
pass_hashed es: $2y$10$YNMHUhlZgbSk5OTr6ZAbE.k.CjlFKrXmPMIm5Khtzi2I4hIBMerzq

el primero es el password que tipeo para incresar
y el segundo es el cifrado que viene de la base de datos

MinusFour

Cita de: lauro en 26 Mayo 2021, 00:05 AM
Muestran esto en pantalla:

pass es: 1234
pass_hashed es: $2y$10$YNMHUhlZgbSk5OTr6ZAbE.k.CjlFKrXmPMIm5Khtzi2I4hIBMerzq

el primero es el password que tipeo para incresar
y el segundo es el cifrado que viene de la base de datos

Ese hash pertenece al string vacio:

Citar
php > var_dump(password_verify('', '$2y$10$YNMHUhlZgbSk5OTr6ZAbE.k.CjlFKrXmPMIm5Khtzi2I4hIBMerzq'));
bool(true)

De hecho, tu esperas que la variable este vacia:

Código (php) [Seleccionar]
if(... && empty($password) && ...)

Cuando haces esto:

Código (php) [Seleccionar]
$password1 = password_hash ($password, PASSWORD_DEFAULT);

Así que es de esperarse que $password es un string vacio.