Hola,
Primero tienes que saber 2 cosas sobre hash:
- No es reversible (en teoría)
- Los hash actuales no tienen el mismo valor sobre la misma entrada. Es decir, password_hash('1234', PASSWORD_BCRYPT) cada vez que lo ejecutes te va a dar un resultado diferente. No es como SHA.
Una vez comprendido eso el siguiente paso es entender el flujo de verificación de hash:
- Un usuario al registrarse te da una contraseña en texto plano
- Sobre esta contraseña aplicas algoritmo de hash que es el que guardas en BBDD asociado a su usuario
- Cuando el usuario hace login te da su nombre de usuario que es el que consultas sobre la BBDD
- Si el usuario existe tendrás el valor de su hash de contraseña.
- Verificas que el texto plano que te ha pasado sea equivalente al hash que tienes en BBDD
- Si es equivalente todo ok. Si no pues la contraseña está mal.
¿Cómo quedaría el código?
Código PHP:
Ver original<?php
?>
<?php
require_once("conexion.php");
?>
<?php
$contador=0;
if(isset($_SESSION["session_username"])){ // echo "Session is set"; // for testing purposes
header("Location: index.php"); }
if(isset($_POST["login"])){ if(!empty($_POST['username']) && !empty($_POST['password'])) {
$username=$_POST['username'];
$password=$_POST['password'];
$query = mysql_query("SELECT * FROM loggeous WHERE '" . $username . "' = username LIMIT 1");
if($numrows != 0)
{
{
$dbusername=$row['username'];
$dbpassword=$row['password'];
$dbnombre = $row['nombre'];
$id = $row['cod_us'];
$correo = $row['email'];
$telefono = $row['celphone'];
$tipo_usuario = $row['tipo_usuario'];
$foto = $row['img_profile'];
}
if(password_verify($password, $dbpassword))
{
$_SESSION['session_username']=$username;
$_SESSION['nombre_usuario'] = $dbnombre;
$_SESSION['cod_us'] = $id;
$_SESSION['email'] = $correo;
$_SESSION['celphone'] = $telefono;
$_SESSION['tipo_usuario'] = $tipo_usuario;
$_SESSION['password'] = $password;
$_SESSION['img_profile'] = $foto;
/* Redirect browser */
header("Location: index.php"); }else{
$message = "La contraseña está mal";
}
} else {
$message = "El usuario no existe!";
}
} else {
$message = "Todos los campos son requeridos!";
}
}
?>
Aún así tienes mucho código por mejorar pero eso te lo dará la experiencia.
Suerte con tu aplicación,
Un abrazo