我正在使用PHP为我的项目网站创建一个登录区,但由于某些原因,verify_password不会返回true,即使我提供了正确的密码。我不知道我做错了什么。
下面是我用来将用户添加到MySQL表的代码:
$password= $_POST['password'];
$hash = password_hash('$password', PASSWORD_DEFAULT);
// I know this isn't inject proof
$res = $conn->prepare('INSERT INTO login (SSN, UserName, passhash) VALUES (:SSN, :UserName, :passhash)');
$res->bindValue(':SSN', $_POST['UserName']);
$res->bindValue(':UserName', $_POST['UserName']);
$res->bindValue(':passhash', $hash);
$res->execute();它将散列存储在varchar(60)中,下面是获取密码的代码,并根据散列进行验证:
$userName = $_POST['UserName'];
$password= $_POST['password'];
// I doubt this is inject proof
$res = $conn->prepare("select passhash from login where UserName='$userName'");
//$res->bindValue(':SSN', $_POST['UserName']);
//$res->bindValue(':UserName', $_POST['UserName']);
//$res->bindValue(':hash', $hash);
$res->execute();
$result = $res->fetch();
if(!empty($result) && password_verify($password, $result['passhash']))任何帮助或建议都是非常感谢的。我在这里已经无计可施了。
发布于 2021-04-19 10:22:46
单引号防止变量插值,因此将文字字符串$password编码为密码:
$hash = password_hash('$password', PASSWORD_DEFAULT);直接使用变量就可以了:
$hash = password_hash($password, PASSWORD_DEFAULT);https://stackoverflow.com/questions/67155201
复制相似问题