Проблема с сравнением паролей php

280
09 мая 2017, 04:08

В моей базе пароли зашифрованы в md5. И когда хочу залогиниться, то пишет "Incomplete combination of password and login". Не могу понять в чём ошибка, надеюсь на вашу помощь!

    public function connexion()
{
    switch ($_SERVER['REQUEST_METHOD']) {
        case 'GET' :
            if (isset($_SESSION['user'])) {
                $error_message = "You are already connected as " . $_SESSION['user'];
                include 'views/error.php';
            } else {
                include 'views/connexion.html';
            }
            break;
        case 'POST' :
            if (isset($_POST['login']) && isset($_POST['pw'])) {
                $login = htmlspecialchars($_POST['login']);
                $pw = htmlspecialchars($_POST['pw']);
                $u = User::get_by_login($login);
                if (!is_null($u)) {
                    if ($u->getMdp() == hash('md5', $pw)) {
                        $_SESSION['user'] = $login;
                        $_SESSION['uid'] = $u->getId();
                        $_SESSION['usadmin'] = $u->getIsAdmin();
                        header('Location: index.php?ctrl=video&action=showVideos');
                        exit();
                    } else {
                        $error_message = "Incomplete combination of password and login";
                        include 'views/error.php';
                    }
                } else {
                    $error_message = "This login does not exist !";
                    include 'views/error.php';
                }
            } else {
                $error_message = "Incomplete fields !";
                include 'views/error.php';
            }
            break;
    }
}

public function getMdp()
{
    return $this->_mdp;
}
public function setMdp($pw)
{
    if (is_string($pw)) {
        $this->_mdp = $pw;
    } else {
        $this->_mdp = '';
    }
}
Answer 1

У вас метод getMdp возвращает пустое значение, т.к. не вижу, где setMdp устанавливает значение переменной $this->_mdp (которая используется для сравнения). И подозреваю, что в setMdp($pw) поступает пароль, а не его хэш, после чего вы сравниваете пароль с хэшом, что не будет равно.

И как верно заметил @etki, не используйте md5, либо хотя бы солите пароли.

READ ALSO
Полнотекстовый поиск от начала строки

Полнотекстовый поиск от начала строки

В БД имеются три записи с текстом "Город", "Новый город" и "Старый город"Делаем запрос для полнотекстового поиска:

260
Как вывести массив чисел в TableView?

Как вывести массив чисел в TableView?

Есть двумерный массив чисел, его нужно вывести в TableView

327
Сохранить объект File

Сохранить объект File

Есть загрузчик данных с HTTP, на выходе он выдает объект типа File, как мне его сохранить в папку с приложением?

208