我目前正在尝试使用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库: PHPass
如果有人可以解释我用来解决问题的过程,我将不胜感激。
先谢谢,抱歉问题太大了。我试图尽我所能解释。
答案 0 :(得分:3)
我建议从查询中删除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
)匹配