【发布时间】:2017-09-03 12:22:56
【问题描述】:
我已经搜索和阅读了大约 50 篇关于我的问题的帖子,但仍然无法弄清楚我的问题,所以我在这里。
问题:password_verify() 即使密码正确也会返回 false。
这就是我将密码存储到数据库中的方式(注册和编辑配置文件时)
$hashedPassword = password_hash($password, PASSWORD_DEFAULT);
还有我最新的password_verify()(我已经尝试了很多示例,没有一个有效,现在我坐在这里,代码仍然无效)
public function doLogin($username,$password){
try{
$stmt = $this->conn->prepare("SELECT id, username, password FROM users WHERE username=:username");
$stmt->execute(array(':username'=>$username));
$userRow=$stmt->fetch(PDO::FETCH_ASSOC);
if (password_verify($password, $userRow['password'])) {
$_SESSION['user_session'] = $userRow['id'];
$_SESSION["result"]='You have succesfully logged in your profile!';
return true;
}else{
return false;
}
}
catch(PDOException $e)
{
echo $e->getMessage();
}
}
我的数据库字段长度为 25 个字符。这里有什么问题?
【问题讨论】:
-
数据库查询是否在检索用户记录?如果没有匹配的用户记录,您的代码应该怎么做?数据库查询返回的密码哈希是否正确?密码哈希的长度是否正确?你在调用这个函数之前没有对 $password 做任何事情(比如转义它)或者你在注册或编辑时对输入的密码做了什么?
-
password列有多长?如何输入密码? -
似乎您对密码进行了转义,从而更改了它的值。密码列的长度至少应为 60
-
@Qirel 25 个符号
-
@Crelix - 数据库中的密码字段应至少为 60 个字符,建议使用 255... 那么用户表中的密码列有多长?
标签: php php-password-hash