Я создаю простой сценарий входа в систему, и я могу зарегистрироваться и войти без проблем. Однако сейчас я пытаюсь добавить функцию «Забыли пароль» и не могу понять, почему она не работает.
Я могу обновить пароль в таблице mysql, используя тот же sha512 и метод посола, который я использую в своем сценарии регистрации, но после его обновления я больше не могу войти в систему.
Функция входа в систему, которая запускается, когда пользователь пытается войти, выглядит следующим образом:
if ($stmt = $mysqli->prepare("SELECT userID, firstName, pWord, salt FROM users WHERE email = ? AND conf = 1 LIMIT 1")) {
$stmt->bind_param('s', $email); // Bind "$email" to parameter.
$stmt->execute(); // Execute the prepared query.
$stmt->store_result();
// get variables from result.
$stmt->bind_result($user_id, $firstName, $db_password, $salt);
$stmt->fetch();
// hash the password with the unique salt.
$password = hash('sha512', $password . $salt);
if ($stmt->num_rows == 1) {
// Check if the password in the database matches
// the password the user submitted.
if ($db_password == $password) {
... // Log user in
}
}
}
Парольная часть моего сценария регистрации:
$random_salt = hash('sha512', uniqid(openssl_random_pseudo_bytes(16), TRUE));
// Create salted password
$password = hash('sha512', $password . $random_salt);
// Insert the new user into the database
if ($insert_stmt = $mysqli->prepare("INSERT INTO users (firstName, lastName, email, pWord, salt, accConf, conf) VALUES (?, ?, ?, ?, ?, ?, 0)")) {
$insert_stmt->bind_param('ssssss', $firstName, $lastName, $email, $password, $random_salt, $confirmation);
$insert_stmt->execute();
... // Do something }
Часть пароля моего скрипта сброса:
$random_salt = hash('sha512', uniqid(openssl_random_pseudo_bytes(16), TRUE));
// Create salted password
$password = hash('sha512', $password . $random_salt);
// Update the user's password
if ($update = $mysqli->prepare('UPDATE users SET pWord = ?, salt = ? WHERE email = ?')) {
$update->bind_param('sss', $password, $random_salt, $email);
$update->execute();
... //Do something }
Я вижу, что в базе данных пароль является обновление, но когда я пытаюсь войти в систему с новым паролем, появляется сообщение об ошибке «Неправильные данные для входа в систему».
Есть ли причина, по которой мои пароли не будут работать после обновления?
Задача ещё не решена.
Других решений пока нет …