Muy buenas,
Estoy trabajando en un proyecto en el que vamos a necesitar un loggin con un usuario y una contraseña. Leyendo por el foro he encontrado una de las mejores soluciones, por lo menos más seguras, la opción de utilizar password_hash(), para aprender a utilizarlo he creado un ejemplo, pero no consigo que funcione..
recojo la información por formulario, la guardo en la base de datos, a la hora de loggear al usuario. Pero en el momento de sacar la contraseña de la base de datos y realizar la función password_verify() siempre me dice que es falso.
Un dato curioso, que puede ser el problema principal es que si encripto la contraseña y justo en ese mismo archivo verifico la generada con la original si me da que es verdadero.
Os muestro el código para aclarar un poco más.
Formulario html
Código HTML:
<h5>Crear usuario</h5>
<form action="recogida.php" method="post">
<input type="hidden" name="accion" value="nuevo"/>
<input type="text" name="nombreUsuario" placeholder="Nombre" required/>
<input type="password" name="passwdUsuario" placeholder="Contraseña" required/>
<input type="submit"/>
</form>
<hr>
<h5>Login</h5>
<form action="recogida.php" method="post">
<input type="hidden" name="accion" value="login"/>
<input type="text" name="loginNombre" placeholder="Nombre" required/>
<input type="password" name="loginPasswd" placeholder="Contraseña" required/>
<input type="submit"/>
</form>
Codigo php
Código PHP:
<?php
//Conexión a la base de datos.
$server = 'localhost';
$db = 'prueba_cifrado';
$userDB = 'root';
$conexion = new PDO("mysql:host=" . $server . ";dbname=" . $db . ";charset=utf8", $userDB);
//Recogida de datos del formulario de nuevo usuario e insercción.
if($_POST['accion'] == "nuevo") {
$nombreUsuario = $_POST['nombreUsuario'];
$passwdUsuario = $_POST['passwdUsuario'];
$hash = password_hash($passwdUsuario, PASSWORD_DEFAULT); //Encriptación por defecto de la contraseña.
$insert = "INSERT INTO `usuario`(`idUsuario`, `nombreUsuario`, `passwdUsuario`) VALUES ('','" . $nombreUsuario . "', '" . $hash . "')";
$conexion->exec($insert);
header('Location:inicio.php');
}
//Recogida de datos del formulario de logueo y consulta a la base de datos.
if($_POST['accion'] == "login") {
$nombreIntroducido = $_POST['loginNombre'];
$passwdIntroducido = $_POST['loginPasswd'];
echo "Nombre introducido: " . $nombreIntroducido;
echo "<br>Password intro: " . $passwdIntroducido;
$seleccion = "SELECT nombreUsuario, passwdUsuario FROM usuario WHERE nombreUsuario= '" . $nombreIntroducido . "'";
$consulta = $conexion->query($seleccion);
$registro = $consulta->fetchObject();
$nombreUsuarioDB = $registro->nombreUsuario;
$passwdUsuarioDB = $registro->passwdUsuario;
echo "<br>Nombre en la DB: " . $nombreUsuarioDB;
echo "<br>Password en la DB: " . $passwdUsuarioDB;
if (password_verify($passwdIntroducido, $passwdUsuarioDB)) {
echo "<br>La contraseña es válida!";
} else {
echo "<br>La contraseña no es válida.";
}
}