Я пытаюсь понять, как использовать password_hash в системах регистрации и входа.
В настоящее время я использую password_hash для регистрации своих пользователей.
$pass = $_POST['Pass'];
$hashed_password = password_hash($pass, PASSWORD_DEFAULT);
$stmt = $conn->prepare("INSERT INTO `usuario`(`Nick`, `Nombre_u`, `Apellidos`, `e-mail`, `Password`, `Domicilio`, `Colonia`, `Codigo_Postal`, `Cuidad`, `Estado`, `Telefono`) VALUES (?, ?, ?, ?, ?, ? , ?, ?, ?, ?, ?)");
$stmt->bind_param( "sssssssisss", $nick, $nombre, $apellidos, $mail, $hashed_password, $domicilio, $colonia, $cp, $cuidad, $estado, $telefono);
$stmt->execute();
header("Location: ../Registrado.php?Done=Welcome");
И я регистрирую своих пользователей таким образом.
$usuario = $_POST["Nick"];
$contra = $_POST["Pass"];
$hashed_password = password_hash($contra, PASSWORD_DEFAULT);
$stmt = $conn->prepare("SELECT Nick, Password FROM usuario WHERE Nick = ? AND Password= ?");
$stmt->bind_param( "ss", $usuario, $hashed_password);
$stmt->execute();
$stmt->store_result();
$stmt->bind_result($a, $b);
if($stmt->fetch() == 0){
header("Location: ../Entrar.php?message=Error");
exit();
}
else {
session_start();
$_SESSION['Usuario'] = $a;
$_SESSION['estado'] = 'Autenticado';
header("Location: ../../Index.php");
exit();
}
Как я понимаю, мой запрос будет делать что-то вроде этого.
Сначала примет мой ввод, например: «123
», затем hashed_password превратит мой ввод в, например: «$2y$10$BvFW3ott5f7JvZ4rCa
», и мой запрос выполнит свою работу следующим образом.
SELECT Nick, Password FROM usuario WHERE Nick = 'User' AND Password= '$2y$10$BvFW3ott5f7JvZ4rCa'
Но я все еще возвращаюсь к своей форме входа вместо входа в систему.
Что я делаю не так?
password_verify()
, а неpassword_hash()
. - person Funk Forty Niner   schedule 05.03.2017password_hash()
будет создавать разные хеши каждый раз, когда вы его используете, даже для одного и того же пароля. Вам нужно получить хэш пароля для имени пользователя, а затем, как упоминалось в других комментариях, вместо этого проверить его с помощьюpassword_verify()
в своем коде. - person Magnus Eriksson   schedule 05.03.2017