Почему не работает password_verify()

Рейтинг: 2Ответов: 1Опубликовано: 30.05.2023

столкнулся с ситауацией, что не прозодит проверка пароля

 $username = $_POST['username'];
        $password = $_POST['password'];
        $password = md5($password);
        $sql ="SELECT * FROM users WHERE usr ='$username'";
        $stmt =sqlsrv_query($conndev,$sql) or die(print_r(sqlsrv_query()));
        $row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC); 
        if (!$row) 
        {
            echo '<p class="error">Неверные пароль или имя пользователя!</p>';
        }else 
        {
        var_dump($password);
        var_dump($row['pass']);         
            $pas_check = password_verify($password, $row['pass']);
            var_dump($pas_check);
            if ($pas_check == true) {
                echo '<p class="success">Поздравляем, вы прошли авторизацию!</p>';
                $_SESSION['user_id'] = $row['id'];           
            }
            else
            {
                echo '<p class="success">Пароль не верный</p>';
            }

Вот что выводит ВарДамп : string(32) "1844156d4166d94387f1a4ad031ca5fa" string(32) "1844156d4166d94387f1a4ad031ca5fa" bool(false) Хотя пароли идентичные, в чем может быть проблема? Или сделать явную проверку , без password_verify? Насколько это будет безопасно?

Ответы

▲ 2Принят

Да, вам нужно делать простую проверку.

В документации написано, что функция password_verify

Verifies that the given hash matches the given password.

То есть это не то, что вам нужно. Просто проверяйте вместо

$pas_check = password_verify($password, $row['pass']);

это

$pas_check = $password === $row['pass'];

Переменную $password изменять не нужно.