Я использую PHPASS для хранения зашифрованных паролей и сравнения при входе в систему.
вот код
ob_start(); $userName = $password = ""; $userNameErr = $passwordErr = $loginErr = ""; $hasher = new PasswordHash(8, false); if (isset($_POST['subEmployee'])) { if (empty($_POST['user_name'])) { $userNameErr = "User name is required"; } else { $userName = check_input($_POST['user_name']); if (!preg_match("/^[0-9_a-zA-Z]*$/", $userName)) { $userNameErr = "Only letters, numbers and '_' allowed"; } } if (empty($_POST['password'])) { $passwordErr = "Password is required"; }else{ $password = check_input($_POST['password']); } $active = 1; $loginUser = $db->prepare("SELECT password FROM users WHERE user_name=? AND activity=?"); $loginUser->bind_param('si', $userName, $active); if ($loginUser->execute()) { $results = $loginUser->get_result(); if ($results->num_rows == 1) { $row = $results->fetch_object(); $stored_hash = "*"; $stored_hash = $row->password; $check = $hasher->CheckPassword($password, $stored_hash); if ($check) { $_SESSION['name'] = $row->first_name; $_SESSION['userId'] = $row->id; $_SESSION['user'] = 1; print_r($_SESSION); header("Location:?pid=4"); } elseif (!empty($_POST['user_name']) && !empty($_POST['password'])) { $loginErr = "'Invalid Login Information'"; } } } }
до сих пор он всегда дает одно и то же сообщение «Недействительная информация для входа». Я сделал регистрационную форму, которая хранит мой пароль, как это.
$hasher = new PasswordHash(8, false); $hash = md5(rand(0, 1000)); if (empty($_POST['password'])) { $error ['passwordErr'] = "Password is required"; } elseif (strlen($_POST['password']) < 8) { $error ['passwordErr'] = "<span class='notAllowed'>Chose password with at last eight characters</span>"; } elseif (strlen($_POST['password']) > 72) { $error ['passwordErr'] = "<span class='notAllowed'>Password max 72 characters</span>"; } elseif ($_POST['password'] !== $_POST['confirm']) { $error ['passwordErr'] = "Password don't matching"; } else { $password = $hasher->HashPassword($password); }
когда я проверил свою базу данных, мне кажется, что пароль мне хэширован, и имя пользователя есть, и все в порядке.
но все еще получаю это сообщение как «Недопустимая информация для входа».
эти две строки правильные
$loginUser = $db->prepare("SELECT password FROM users WHERE user_name=? AND activity=?"); $loginUser->bind_param('si', $userName, $active);
код входа в систему ОК.
Я тоже это пробовал
Обновление Я обновил свой код
if (isset($_POST['subEmployee'])) { $error=array(); $hash_cost_log2 = 8; $hash_portable = FALSE; $hasher = new PasswordHash($hash_cost_log2, $hash_portable); if (empty($_POST['user_name'])) { $userNameErr = "User name is required"; } else { $userName = check_input($_POST['user_name']); if (!preg_match("/^[0-9_a-zA-Z]*$/", $userName)) { $userNameErr = "Only letters, numbers and '_' allowed"; } } if (empty($_POST['password'])) { $passwordErr = "Password is required"; } else { $password = $_POST['password']; } $active = 1; $loginUser = $db->prepare("SELECT password FROM hired_person_info WHERE user_name=? AND activity=?"); $loginUser->bind_param('si', $userName, $active); if ($loginUser->execute()) { $results = $loginUser->get_result(); if ($results->num_rows == 1) { $row = $results->fetch_object(); $stored_hash = "*"; $stored_hash = $row->password; $check = $hasher->CheckPassword($password, $stored_hash); if ($check) { $_SESSION['name'] = $row->first_name; $_SESSION['userId'] = $row->id; $_SESSION['user'] = 1; print_r($_SESSION); header("Location:?pid=4"); } elseif (!empty($_POST['user_name']) && !empty($_POST['password'])) { $loginErr = "'Invalid Login Information'"; } } else { $loginErr = "'We didn't find any users'"; } } }
добавьте это из руководства PHPass
$hash_cost_log2 = 8; $hash_portable = FALSE; $hasher = new PasswordHash($hash_cost_log2, $hash_portable);
все еще не повезло, кто-нибудь скажет мне, где я здесь ошибаюсь
Изменить это мой код check_input()
function check_input($data) { $data = trim($data); $data = stripslashes($data); $data = htmlspecialchars($data); return $data; }
и я использую PHP 5.3.29
благодаря