2015-05-30 2 views
0

Я начал использовать password_hash() для хэширования паролей. Проблема, с которой я столкнулась, заключается в том, что когда я использую password_verify(), чтобы проверить, соответствует ли входное значение хешированным паролям, хранящимся в базе данных, каждый раз, когда он возвращает false.PHP: Хеширование пароля

$password = "test"; 

    $query = "SELECT password FROM user WHERE password = :pass "; 
    $statement = $connection->prepare($query); 
    $statement->bindParam(":pass", $password); 
    $statement->execute(); 

    if(password_verify($password, $row['password'])){ 
    echo "Password Valid"; 
    } 

    else { 
    echo "Invalid Password"; 
    } 

Однако, если для меня например скопировать один хэш-значение пароля из базы данных и поместить его на место $ строки [ «пароль»], и когда я проверить код, он возвращает меня так.

if(password_verify($password, '$2y$10$kc09i9YSP.ExmUquMqRnf......')){ 
    echo "Password Valid"; 
    } 

Помогите пожалуйста.

+0

проверить ссылку ниже http://stackoverflow.com/questions/19855715/php-password-hash-and-password-verify-issues-no -match Спасибо! –

+1

'SELECT password WHERE password =: password' - really‽ – deceze

ответ

3

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

Другая проблема заключается в том, что звонок $row['password'], но вы еще не определили его в своем коде. Сначала выберите строку, а затем вы можете подтвердить пароль.

Что-то, как это должно работать:

$username = "test"; 

$query = "SELECT password FROM user WHERE username = :username "; 
$statement = $connection->prepare($query); 
$statement->bindParam(":username", $username); 
$statement->execute(); 
$row = $statement->fetch(); 

if(password_verify($password, $row['password'])){ 
    echo "Password Valid"; 
} 
else { 
    echo "Invalid Password"; 
} 
+0

Большое вам спасибо :) –

+0

Я рад, что это помогло! :) –

-1

Заменить:

$statement->bindParam(":pass", $password); 

С:

$statement->bindParam(":pass", password_hash($password, PASSWORD_DEFAULT)); 

Пожалуйста, используйте ответ от Joel Hinz

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