2016-02-26 2 views
-1

У меня возникли проблемы с проверкой пароля с функциями password_hash и password_verify. По какой-то причине он всегда возвращает false.PHP - password_verify всегда возвращает false

Хэш хранится в базе данных, когда пользователь предоставляет электронное письмо и пароль, если существует запись пользователя с предоставленным электронным письмом, предоставленный проход и хэш из этой пользовательской записи проверяется (возвращает false , указав правильный пароль).

код ниже для целей тестирования, потому что он не был надлежащим образом работает в реальном контексте (с данными, хранящимися в Databse)

Heres некоторые из кода.

<?php 
     //create random password with 15 chars 
     $pass = generate_random_string(15); 
     $hash = password_hash($pass, PASSWORD_BCRYPT); 
     var_dump(password_verify($pass, $hash)); 
     //returns bool(true) 

Недо эта часть все в порядке, он создает проход, хеширования и когда проверено возвращает истину. Теперь странная часть.

 if (isset($_GET['pass']) && 
      isset($_GET['hash'])) { 

      var_dump(password_verify($_GET['pass'], $_GET['hash'])); 
      //returns bool(false) 
     } 
    ?> 

Если я беру предыдущие сгенерированные значения (передвигайте и хэш) и передать их имеют параметры URL и проверить их, он возвращает ложь.

Что я здесь делаю неправильно?

UPDATE

демпинга массив $ _GET показывает правильные параметры и значения.

+0

Вы должны предоставить 'password_verify' функцию, а – Derek

+0

вы можете также дамп $ _GET массив - я думаю, вы могли бы предположить что-то, что не так там ... –

+1

Не означает ли «хэш» хранить и использовать позже, когда пользователь отправляет пароль? –

ответ

2

Попробуйте кодирования значений перед добавлением их в URL:

$pass = generate_random_string(15); 
$hash = password_hash($pass, PASSWORD_BCRYPT); 
var_dump(password_verify($pass, $hash)); 
$pass_encoded = urlencode($pass); // PASS THIS IN THE URL 
$hash_encoded = urlencode($hash); // PASS THIS IN THE URL 

И в его расшифровать:

if (isset($_GET['pass']) && isset($_GET['hash'])) { 
    var_dump(password_verify(urldecode($_GET['pass']), urldecode($_GET['hash']))); 
} 
+0

Bamn. Похоже, вы забили меня на несколько секунд. –

+0

Извините, но это не решит проблему, возвращает тот же результат. Спасибо, в любом случае –

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