Login with password_verify

2

I applied encryption passwords using password_hash() .

When I try to login using password_verify I can not access. I think the problem is in the $row = $query->fetch(PDO::FETCH_ASSOC) part because when I do var_damp($row) it does not return anything.

This is the code (method CheckUser of class Usuario ).

public function CheckUser() {

        // Try and cacth para capturar errores
        try {

                // Guardamos la sentencia sql para sacar obtener al usuario de la base de datos
                $sql = 'SELECT * FROM usuarios WHERE usuario = ? AND password = ?';

                // Preparamos la consulta con la sentencia guardada en $sql usando el atributo de la clase Conexion
                $query = $this->conexion_db->prepare($sql);

                // Evitamos inyección sql
                $user = htmlentities(addslashes($_POST['user']));
                $password = htmlentities(addslashes($_POST['password']));

                // Ligamos los parámetros de la consulta usando bindParam con lo que haya escrito el usuario en el formulario de login
                $query->bindParam(1, $user, PDO::PARAM_STR);
                $query->bindParam(2, $password, PDO::PARAM_STR);

                // Ejecutamos la consulta
                $query->execute();

                $row = $query->fetch(PDO::FETCH_ASSOC);

                if(password_verify($password, $row['password'])){

                    // Iniciamos sesión
                    session_start();

                    // Guardamos en la variable supergoblal el nombre de usuario
                    $_SESSION['usuario'] = $_POST['user'];

                    // Guardamos la cookie
                    include('cookie.php');
                    Cookie();

                    // Dirigimos al usuario a una página temporal para comprobar que funciona
                    header('location:../index.php');

                } else {

                    // Dirigimos al usuario de nuevo a la página de login
                    // header('location:../acceder.php');
                    echo var_dump($query->execute());
                }

        } catch (Exception $e) {

            echo "Error en la ejecución de la consulta<br>";
            echo "Mensaje: " . $e->GetMessage() . "<br>";
            echo "Línea: " . $e->getLine();

        }
    }
    
asked by David 01.06.2017 в 12:17
source

1 answer

2

What fails is the obtaining of the user since the password of the BBDD is encrypted and when making the query you check against a clear one. This is how it should work

public function CheckUser() {

    // Try and cacth para capturar errores
    try {

            // Guardamos la sentencia sql para sacar obtener al usuario de la base de datos
            $sql = 'SELECT * FROM usuarios WHERE usuario = ?';

            // Preparamos la consulta con la sentencia guardada en $sql usando el atributo de la clase Conexion
            $query = $this->conexion_db->prepare($sql);

            // Evitamos inyección sql
            $user = htmlentities(addslashes($_POST['user']));
            $password = htmlentities(addslashes($_POST['password']));

            // Ligamos los parámetros de la consulta usando bindParam con lo que haya escrito el usuario en el formulario de login
            $query->bindParam(1, $user, PDO::PARAM_STR);

            // Ejecutamos la consulta
            $query->execute();

            $row = $query->fetch(PDO::FETCH_ASSOC);

            if(password_verify($password, $row['password'])){

                // Iniciamos sesión
                session_start();

                // Guardamos en la variable supergoblal el nombre de usuario
                $_SESSION['usuario'] = $_POST['user'];

                // Guardamos la cookie
                include('cookie.php');
                Cookie();

                // Dirigimos al usuario a una página temporal para comprobar que funciona
                header('location:../index.php');

            } else {

                // Dirigimos al usuario de nuevo a la página de login
                // header('location:../acceder.php');
                echo var_dump($query->execute());
            }

    } catch (Exception $e) {

        echo "Error en la ejecución de la consulta<br>";
        echo "Mensaje: " . $e->GetMessage() . "<br>";
        echo "Línea: " . $e->getLine();

    }
}
    
answered by 01.06.2017 / 12:52
source