php - PHP 密码验证在 MySQLi 中无法正常工作
问题描述
我能够像这样散列和验证密码
<?php
$password ="passss.com";
$hash = password_hash($password, PASSWORD_DEFAULT);
if (password_verify('passss.com', $hash)) {
echo 'Password is valid!';
} else {
echo 'Invalid password.';
}
?>
但是当我尝试在从 MySQL 查询数据时做同样的事情时,我总是得到Invalid password
我只是$hash
在 PHP 文件中创建并手动将其插入 MySQL 表中。
if (!isset($_POST['username'], $_POST['password'])) {
die('Please fill both the username and password field!');
}
if ($stmt = $con->prepare('SELECT id, userpassword FROM users WHERE useremail = ?')) {
$stmt->bind_param('s', $_POST['username']);
$stmt->execute();
$stmt->store_result();
if ($stmt->num_rows > 0) {
$stmt->bind_result($id, $userpassword);
$stmt->fetch();
if (password_verify($_POST['password'], $userpassword)) {
$_SESSION['loggedin'] = true;
echo "Password is valid";
} else {
echo "Invalid password.";
}
} else {
echo 'Incorrect username!';
}
}
解决方案
您确定使用 php 构建函数正确散列密码。就像是
$password=$_POST['password'];
$options = array("cost"=>4);
$hashPassword = password_hash($password,PASSWORD_BCRYPT,$options);
// 这里传递$hashPassword并插入数据库
我已经在下面的链接中回答了这个问题,您可以在其中学习注册、验证密码哈希然后登录
推荐阅读
- python - 使用python的排队系统问题
- javascript - TypeError:无法解析模块说明符“remarkable”。相对引用必须以“/”、“./”或“../”开头
- javascript - 如何让 navigator.share 为 Facebook 工作?
- javascript - 在辅助函数中调用上下文函数 - React
- regex - 可选的千位分隔符处理不完整的字符串
- c++ - C ++:如何更改表达式模板以处理无限数量的总和?
- typescript - 使用泛型在另一个参数中重用第一个参数的键
- android - 未解决的参考:getTargetUrlFromInboundIntent FacebookSDK
- r - 如何解决错误:第 1 列必须在 R 中命名
- node.js - 尝试使用 tus 上传到 vimeo 时出现“内容长度 0 太小”