PHP Проверка паролей с использованием password_verify и password_hash - PullRequest
0 голосов
/ 13 октября 2018

Я пытаюсь использовать хеш из PHP для шифрования моего пароля, сохраняемого в базе данных.Это мой код входа в систему:

$email=$_POST['email'];
$password=$_POST['password'];
$sql ="SELECT user_email FROM tbl_user WHERE user_email=:email ";
$query= $dbh -> prepare($sql);
$query-> bindParam(':email', $email, PDO::PARAM_STR);
$query-> execute();
$results=$query->fetchAll(PDO::FETCH_OBJ);
if($query->rowCount() > 0)
{
    if(password_verify($password, $results["user_password"]))
    {
        $_SESSION['signin']=$_POST['email'];
        $currentpage=$_SERVER['REQUEST_URI'];
        echo "<script type='text/javascript'> document.location = '$currentpage'; </script>";
    }
    else
    {
        echo "<script>alert('Invalid Details');</script>";
    }
} else{

    echo "<script>alert('Invalid Details');</script>";

}

и это мой код регистрации:

$user_fullname=$_POST['fullname'];
$user_email=$_POST['email'];
$user_phonenumber=$_POST['telephone'];
$hashToStoreInDb = password_hash($_POST['password'], PASSWORD_DEFAULT);
$sql="INSERT INTO  tbl_user(user_email,user_fullname,user_phonenumber,user_password) VALUES(:user_email,:user_fullname,:user_phonenumber,:hashToStoreInDb)";
$query = $dbh->prepare($sql);
$query->bindParam(':user_email',$user_email,PDO::PARAM_STR);
$query->bindParam(':user_phonenumber',$user_phonenumber,PDO::PARAM_STR);
$query->bindParam(':user_fullname',$user_fullname,PDO::PARAM_STR);
$query->bindParam(':hashToStoreInDb',$hashToStoreInDb,PDO::PARAM_STR);
$query->execute();
$lastInsertId = $dbh->lastInsertId();
if($lastInsertId)
{
    echo "<script>alert('Something went wrong. Please try again');</script>";
}
else
{
    echo "<script>alert('Registration successfully. Now you can Sign In');</script>";
}

Я могу зарегистрироваться и сохранить данные в своей базе данных, после регистрации я не могуподтвердите пароль для входа в систему, и я застрял при входе в систему.Пожалуйста, помогите мне, если у меня есть неправильный код или любой код предложения, чтобы изменить мой код.Спасибо за помощь

1 Ответ

0 голосов
/ 13 октября 2018

Ваш запрос на вход в систему не восстанавливает хэш пароля, который хранится в вашей БД.Вам нужно взять хэш пароля, который находится в вашей БД, и сравнить его с хэшем пароля, который генерируется из пароля пользователя, представленного при входе в систему. Я думаю, что это должно сработать.

Измените запрос на вход в систему на:

$sql ="SELECT user_email, user_password FROM tbl_user WHERE user_email=:email ";

Кроме того, ваш запрос возвращается как объект.Поэтому вместо ссылки $results["user_password"] вам нужно ссылаться на переменную, например $results->user_password.

...