我在使用password_hash和password_verify函数验证密码时遇到了麻烦。 由于某些原因,它总是返回false。PHP - password_verify总是返回false
散列存储在数据库中,当用户提供电子邮件和密码时,如果存在提供的电子邮件的用户记录,则提供的通过和来自该用户记录的散列被验证(这将返回false ,提供正确的密码)。
代码波纹管是用于测试目的,因为它不是在真实背景下正常工作(与存储在数据DATABSE)
继承人一些代码。
<?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)
直到这一部分一切正常,它创建一个pass,哈希它,当验证返回true时。 现在怪异的部分。
if (isset($_GET['pass']) &&
isset($_GET['hash'])) {
var_dump(password_verify($_GET['pass'], $_GET['hash']));
//returns bool(false)
}
?>
如果我采用先前生成的值(pass和hash)并传递它们具有url参数并验证它们,则返回false。
我在这里做错了什么?
UPDATE
转储$ _GET数组显示正确的参数和值。
您需要提供'password_verify'功能以及 – Derek
可以还转储$ _GET数组 - 我认为你可能会假设一些在那里不正确的东西...... –
当用户发送密码时,'hash'是否应该被存储和使用? –