如何使用password_hash注册和登录
问题描述:
我想弄清楚如何在注册和登录系统上使用password_hash。如何使用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()
$usuario = $_POST["Nick"];
$contra = $_POST["Pass"];
$stmt = $conn->prepare("SELECT Nick, Password FROM usuario WHERE Nick = ?");
$stmt->bind_param("s", $usuario);
$stmt->execute();
$stmt->store_result();
$stmt->bind_result($a, $b);
if($stmt->fetch() == 0){
header("Location: ../Entrar.php?message=Error");
exit();
}
else {
if(password_verify($contra, $b)) {
session_start();
$_SESSION['Usuario'] = $a;
$_SESSION['estado'] = 'Autenticado';
header("Location: ../../Index.php");
exit;
}
else{
header("Location: ../Entrar.php?message=Error");
exit;
}
}
谢谢你的那些评论。 是的martinstoeckli这是我的问题的答案谢谢
登录SELECT需要'password_verify()'而不是'password_hash()'。 –
加上,您的密码栏的长度太短。最好回到阅读手册并遵循其“句法”的语法。 –
''password_hash()'每次使用时都会产生不同的散列值,即使是相同的密码。您需要获取用户名的密码哈希值,然后像提及的其他评论一样,在代码中用'password_verify()'验证它。 –