这是我的控制器。只有 else 部分在 if 循环中执行。用户输入密码时如何验证密码?
以下函数没有返回 true,我不明白为什么。我没有收到任何数据库错误,但由于某种原因它肯定会返回 false。表名和字段名正确。
6 6
答案 0 :(得分:0)
改变
$password = md5($this->request->getVar('password'));
到
$password = password_hash($this->request->getVar('password'), PASSWORD_DEFAULT);
。
password_verify
不仅仅适用于任何哈希,它还需要算法和盐信息;这是password_hash
为您处理的事情。
php > $hash = md5('abc123');
php > var_dump(password_verify('abc123', $hash));
php shell code:1:
bool(false)
php > $hash = password_hash('abc123', PASSWORD_DEFAULT);
php > var_dump(password_verify('abc123', $hash));
php shell code:1:
bool(true)
这也解决了在任何情况下都不应该使用 MD5 来混淆密码的事实。