2013-11-10 5 views
5

Я прочесываю голову на это более 2 часов. Я исследовал статьи на StackOverflow в том числе:PHP - password_verify issue

И я гавань была в состоянии исправить мою проблему. Я был бы признателен за некоторые рекомендации о том, сколько идиота я являюсь:

Функция для вставки данных в базу данных MySQL:

function insertUser($userObj) { 
    $query = $this->databaseConnection->getStntPrepare()->prepare(
      "INSERT INTO user(username, userpassword) VALUES (?,?);"); 
    $username = $userObj->getUsername(); 
    $password = password_hash('testing1234', PASSWORD_BCRYPT); 

    $query->bind_param('ss', $username, $password); 
} 

Проверка входа пользователя путем извлечения данных из MySQL:

function findUser($userObj) { 
    $query = $this->databaseConnection->getStntPrepare()->prepare(
      "SELECT userid, userpassword 
       FROM user 
       WHERE username=?"); 

    $pass = 'testing1234' 
    $query->bind_param('s', $userObj->getUsername()); 
    $query->execute(); 
    $query->bind_result($userid, $hash); 

    while ($query->fetch()) { 

     if (password_verify($pass, $hash)) { 
      echo 'Password is valid!'; 
     } else { 
      echo 'Invalid password.'; 
     } 
    } 
} 

При запуске я получаю «Неверный пароль».

Когда я ниже, не вставляя в базу данных, то получение:

$hash = password_hash('testing1234', PASSWORD_BCRYPT); 
if (password_verify('testing1234', $hash)) { 
    echo 'Password is valid!'; 
} else { 
    echo 'Invalid password.'; 
} 

я получаю 'Пароль действителен!

Я считаю, что моя проблема связана с одинарными и двойными кавычками и интерпретацией знака доллара ($) в поле пароля как переменной вместо литерала (как предлагает одна из статей) при сохранении/извлечении из База данных MySQL - однако мне не удавалось решить проблему. Ниже хэш-значение 'testing1234':

$ 2y $ 10 $ 1/oQEuYX67n.U3usxH.7tenNq7hT2dKyBSIZsy5xR3W

+5

Какой тип данных является полем 'userpassword' в базе данных? Какое значение вы видите, если вы 'echo $ hash' перед тем, как называть' password_verify() '? (Также: try 'echo strlen ($ hash)' ...) –

+0

Хороший улов! Проблема варчара (40). Расширены и теперь отсортированы. Спасибо за помощь! –

ответ

2

Проблема была в базе - ничего общего с password_verify или password_hash. У Datatype было максимальное количество символов (только для 40, как я делал MySQL при создании таблиц). Переместилось на 60 и больше проблем.

+0

, почему вы всегда должны запускать строгий режим;) сделало бы проблему очевидной. – hanshenrik

Смежные вопросы