2016-02-28 5 views
0

Я получаю пароль не совпадает, когда я войти в систему, когда пользователь регистрация, я экономлю пароль,Как использовать метод php password_hash() ..?

$password = password_hash($this->input->post('password'), PASSWORD_BCRYPT); 

когда пользователь Войти Я проверяю пароль, как это,

$hash = password_hash($password, PASSWORD_BCRYPT); 
    $this->db->select('password'); 
    $this->db->from('usersdetails'); 
    $this->db->where('email', $email); 
    $this->db->limit(1); 
    $query = $this->db->get(); 
    $passwordcheck = $query->row()->password; 
    if (password_verify($passwordcheck, $hash)) { 
     return true; 
    } else { 
     return false; 
    } 

НО, что он всегда возвращает пароль, не соответствует..why ????? Любая помощь очень ценится ...

+1

'если (password_verify ($ пароль!, $ хэш)) 'вы проверяете' password_hash() ', где вы должны проверять все, что находится в вашем db и введенном пользователем пароле. и убедитесь, что длина столбца равна 60+, когда хэш был сохранен. –

+0

RTM http://php.net/manual/en/function.password-verify.php –

ответ

5

Вы должны проверить необработанный неподтвержденный пароль, так как password_verify() выполняет повторное хеширование необработанного пароля с помощью хеш-процедуры, используемой при создании хэшированного пароля.

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

$password = 'FredsTheMan'; 

$hash = password_hash($password, PASSWORD_BCRYPT); 

if (password_verify($password, $hash)) { 
    return true; 
} else { 
    return false; 
} 

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

хеш генерируется с использованием PASSWORD_BCRYPT 60 символов

$2y$12$QjSH496pcT5CEbzjD/vtVeH03tfHKFy36d4J0Ltp3lRtee9HDxY3K 

Берегитесь, когда другие хэши providied в furure, они могут привести к хэш длиннее 60 символов

Так короче вы код должен быть

$this->db->select('password'); 
$this->db->from('usersdetails'); 
$this->db->where('email', $email); 
$this->db->limit(1); 
$query = $this->db->get(); 
$pwd_from_db = $query->row()->password; 

if (password_verify($this->input->post('password'), $pwd_from_db)) { 
    return true; 
} else { 
    return false; 
} 
+1

[Вы взяли слова прямо из моего рта] (http://stackoverflow.com/questions/35683537/how-to- use-phps-password-hash-method # comment59044498_35683537) * Smokey * ;-) –

+0

Вторая половина дня Ralph @ Fred-ii- Рад, что вы почистили зубы этим утром – RiggsFolly

+0

* Mornin 'Smokey * –