password_verify не возвращает true, что бы я ни делал

0

Независимо от того, что я делаю, я получаю только пароль или имя пользователя, это некорректная строка. Что происходит? Я пытался запустить пример веб-сайта php, и он работал, и что я делаю неправильно? Здесь код ребята:

<?php

include __DIR__.'/includes/database.php';


class Login{

    public function validateCredentials($username, $password){
        global $mysqli;
        $query = "SELECT password FROM users WHERE username = '".mysqli_real_escape_string($mysqli,$username)."';";
        $result = $mysqli->query($query);
        $row = $result->fetch_array(MYSQLI_NUM);
        if(password_verify($row['0'],$password)){return true;} 
        return false;

    }
}

$object = new Login();

if(isset($_POST['username'])&&isset($_POST['password'])) 
{  
    if($object->validateCredentials($_POST['username'],$_POST['password']))
    {
        echo 'Logged in!';
    }
    else
    {
        echo 'Password or username incorrect!';
    }
}
else
{ 
    echo 'Username or password not entered!';
}
?>
  • 0
    Используйте подготовленные операторы с mysqli, все остальное рано или поздно станет инъекцией SQL.
Теги:

2 ответа

2
Лучший ответ

Пусть проверьте password_verify:

boolean password_verify ( string $password , string $hash )

См. Первый аргумент - пароль, а второй - хэш. В вашем коде это наоборот, вы должны использовать

if(password_verify($password, $row['0'])){return true;} 
  • 0
    Это правильный ответ. Спасибо!
1

Попробуй это...

<?php

    include __DIR__.'/includes/database.php';


    class Login{

        public function validateCredentials($username, $password){
            global $mysqli;
            $query = "SELECT password FROM users WHERE username = '".mysqli_real_escape_string($mysqli,$username)."';";
            $result = $mysqli->query($query);
            $row = $result->fetch_array(MYSQLI_NUM);
            return password_verify($password, $row['0']);

        }
    }

    $object = new Login();

    if(isset($_POST['username'])&&isset($_POST['password'])) 
    {  
        if($object->validateCredentials($_POST['username'],$_POST['password']))
        {
            echo 'Logged in!';
        }
        else
        {
            echo 'Password or username incorrect!';
        }
    }
    else
    { 
        echo 'Username or password not entered!';
    }
    ?>
  • 1
    Спасибо, сэр, проблема заключалась в порядке аргументов password_verify.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню