php – PasswordHash检查并登录
我正在尝试使用php和
mysql,我正在尝试使用html表单创建一个简单的注册和登录页面.
到目前为止,我已经创建了一个注册表单,其中包含用户信息,如姓名,电子邮件和密码. 为了安全地存储密码,我使用了PHPass,它使用散列函数来加密和存储我的数据库表中的密码. 到目前为止,我已经能够获取用户提交的密码,运行散列函数并将密码存储到我的表中. 我现在遇到的问题是如何创建一个单独的HTML表单(登录),该表单接收用户的电子邮件和密码,根据存储在表中的哈希密码检查密码,以便将用户签入他们的帐户. 要保存我的密码: require 'phpass/PasswordHash.php'; $user_password = ($_POST['password']); // Create a secure password $hasher = new PasswordHash(10,false); $user_password_hashed = $hasher->HashPassword($user_password); 然后,使用SQL查询: $core_customer_insert = "INSERT INTO core_customer_information(firstname,lastname,email,password,activation_code,activated) VALUES ( '".$conn->real_escape_string($first_name)."','".$conn->real_escape_string($last_name)."','".$conn->real_escape_string($email)."','".$conn->real_escape_string($user_password_hashed)."','".$conn->real_escape_string($code)."','0')"; 我将所需的信息保存到表格中. 然后我创建了一个新的.php文件,其中包含用于登录用户的脚本. 用于登录的HTML: <form action="sign-in-script.php" method="POST"> <table style="width:100%"> <tr> <th><input type="text" name="email" required placeholder="Email" /></th> <th><input type="password" name="password" required placeholder="Password" /></th> <th> <input class="button" id="sign-in-show" type="submit" value="Sign in" name="submit" /> </th> </tr> </table> </form> 然后我的sign-in-script.php使用POST获取电子邮件地址和密码: $email = $_POST['email']; $user_password = $_POST['password']; 然后我创建了一个SQL查询来检查电子邮件和密码是否与我表中存储的行匹配: SELECT * FROM core_customer_information WHERE email='".$email."' AND password='".$user_password."' LIMIT 1 我无法理解的问题是,目前,我的查询是检查db表中的密码是否与用作$_POST的密码匹配,但显然不会返回任何结果,因为它不是’与安全存储的密码的哈希版本相同. 我不完全确定我应该检查表格中给出的密码与db表上的散列版本. 使用的php库: 如果有人可以解释我将用来解决我的问题的过程,我将不胜感激. 在此先感谢,对不起,问题是如此之大.我试图尽我所能解释. 解决方法
我建议从查询中删除AND子句,并在稍后阶段检查密码.像这样:
$query = mysqli_query($your_connection,"SELECT username,password FROM users WHERE username = '$username'"); $result = mysqli_fetch_assoc($query); if (mysqli_affected_rows($your_connection) == 1) { if (password_verify($password,$result['password'])) { return true; } else { return false; } } else { return false; } 编辑:上面使用5.5 password_verify来检查存储在数据库表中的哈希($result [‘password’])是否与提供的密码匹配($password) http://php.net/manual/en/function.password-hash.php (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |