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
<?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
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');
}
}
}
¿Qué resultado te da este código?
$pass_verify = password_verify($password, $password1);
echo "pass es: ".$password;
echo "<br>";
echo "pass_hashed es: ".$password1;
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
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:
if(... && empty($password) && ...)
Cuando haces esto:
$password1 = password_hash ($password, PASSWORD_DEFAULT);
Así que es de esperarse que
$password es un string vacio.