Resulta que estoy intentando implementar la función password_verify() en un login, he realizado ya varias pruebas con resultado negativo y no sé que es lo que puedo estar haciendo mal. En todos los intentos me entra en el mensaje "No existe este usuario o la contraseña es incorrecta.", saliendo un error estilo "Trying to get property of non-object in C:\wamp\www\Pelipedia\login.php on line 205" Ya me he cerciorado de que los campos de la tabla sean los correctos, y no sé porque no captura los datos para iniciar las sesiones. ($_SESSION['userid'] = $result->idusuario; y $_SESSION['name'] = $result->usuario;)
La contraseña la he codificado en la parte del registro tal que así:
Código PHP:
Ver original
Ingresando el $user_password_hash en la BBDD.
Este es el código del login:
Código PHP:
Ver original
<?php if($_POST){ $nombre=$_POST['nombre']; //Campo del formulario verificado $contra=$_POST['contra']; //Campo del formulario verificado $base= new PDO('mysql:host=localhost; dbname=pelipedia','root',''); $base->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); function verificar_login($user,$password,&$result) { try { $base= new PDO('mysql:host=localhost; dbname=pelipedia','root',''); $base->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql="SELECT * FROM usuarios WHERE (usuario = :usu OR mail = :usu)"; $resultado=$base->prepare($sql); $count = 0; while($registro=$resultado->fetch(PDO::FETCH_ASSOC)){ $count++; $result = $registro; } if($count == 1 && password_verify($password,$result['password'])) { return 1; } else { return 0; } $resultado->closeCursor(); }catch(Exception $e) { die("Error: " . $e->getMessage() . "<br>Código del error: " . $e->getCode() . "<br>Línea: " . $e->getLine()); } } // function verificar_login() /*Luego haremos una serie de condicionales que identificaran el momento en el boton de login es presionado y cuando este sea presionado llamaremos a la función verificar_login() pasandole los parámetros ingresados:*/ if(!isset($_SESSION['userid'])) //para saber si existe o no ya la variable de sesión que se va a crear cuando el usuario se logee { if(isset($_POST['login'])) //Si la primera condición no pasa, haremos otra preguntando si el boton de login fue presionado { if(verificar_login($nombre,$contra,$result) == 1) //Si el boton fue presionado llamamos a la función verificar_login() dentro de otra condición preguntando si resulta verdadero y le pasamos los valores ingresados como parámetros. { $_SESSION['userid'] = $result->idusuario; $_SESSION['name'] = $result->usuario; } else { ?> <script> $(".registro").hide().delay(1000); $("#alert").show("slide", { direction: "left" }, 1000).html("<div class='hay'><p>No existe este usuario o la contraseña es incorrecta.</p></div>").delay(3000); window.location.href='login.php'; </script> <?php } } //isset($_POST['login'] } else { echo 'Su usuario ingreso correctamente.'; echo '<a href="logout.php">Logout</a>'; } } ?> //If ($_POST)
A ver si me podéis ayudar, muchas gracias de antemano. Tambíén serán bienvenidas formas más fáciles de hacer login, la base la cogí de un ejemplo (venía con la función validar_login incluída) y la he ido adaptando a mis necesidades.