На моем веб-сайте есть возможность сделать вход и войти в систему. Я хотел использовать новые функции доступа PHP password_hash
и password_verify
для лучшей безопасности. На моем собственном компьютере у меня PHP 5.5, поэтому функции работают нормально. Тем не менее, в моем веб-отеле есть PHP с версией 5.2, поэтому мне пришлось загружать пароли с Github. Теперь функции не работают. Похож, что password_hash
ничего не возвращает, потому что у меня ничего нет в базе данных после регистрации.Функции php password не работают
Я проверил журнал ошибок, и в этом ничего нет. И да, у меня есть error_reporting
по E_ALL | E_STRICT
, log_errors
и я ищу правильный файл.
Я повторяюсь: функции работают без каких-либо проблем, как жестко закодированные на моем компьютере (PHP 5.5), но не работают как загруженные (PHP 5.2).
Мой код:
// model:
public function getUser($email, $pass) {
$this->search("SELECT * FROM users WHERE email = ?", array($email));
if($this->countRows() <= 0) {
return false;
}
$row = $this->fetchRow();
if(!password_verify($pass, $row["password"])) {
return false;
}
if(password_needs_rehash($row["password"], PASSWORD_DEFAULT)) {
$this->run("UPDATE users SET password = ? WHERE id = ?",array(password_hash($pass,PASSWORD_DEFAULT),$row["id"]));
}
return $row;
}
public function userExists($email) {
$this->search("SELECT * FROM users WHERE email = ?", array($email));
if($this->countRows() <= 0) {
return false;
}
return true;
}
// sign up
public function reg() {
if($this->model->userExists($_POST["email"])) {
header("Location: " . PUBLICROOT . "/index/index/error/emailAlreadyExists");
die();
}
$this->model->run("INSERT INTO users (firstname, lastname, email, password, birthday) VALUES (?,?,?,?,?)",
array($_POST["firstname"],$_POST["lastname"],$_POST["email"],
password_hash($_POST["password"],PASSWORD_DEFAULT),$_POST["birthday"]."-".$_POST["birthmonth"]."-".$_POST["birthyear"]));
$this->in();
}
// sign in
public function in() {
$u = $this->model->getUser($_POST["email"],$_POST["password"]);
if($u === false) {
header("Location: " . PUBLICROOT . "/index/index/error/signInFailed");
die();
} else {
$_SESSION["userid"] = $u["id"];
$_SESSION["email"] = $_POST["email"];
$_SESSION["firstname"] = $u["firstname"];
$_SESSION["lastname"] = $u["lastname"];
$_SESSION["time"] = time();
header("Location: " . PUBLICROOT . "/home/index");
die();
}
}
Любые идеи?
*** Для этой библиотеки требуется PHP> = 5.3.7 или версия, в которую в нее входит резервное копирование $ 2y (например, RedHat). *** 5.2 is * sooo * не поддерживается этой библиотекой. – deceze