php - 在数据库中使用 HASH 后的密码 - 无法使用“真实”密码
问题描述
您好,提前感谢您的帮助
我目前正在创建一个系统,当用户注册时,他/她在数据库中注册并且他们的密码被散列。到目前为止,一切都很好。
创建后尝试登录时出现我的问题。我使用散列密码(例如 $2y$10$1p7k9tPy.eU27q7rSHbeaer)登录没有问题,但我无法使用“真实”密码(例如 playstation123)登录,因为系统似乎没有检测到它。
if( count($user) == 0) {
$error_message = 'login+not+found';
header("Location: /login/error/$error_message");
exit();
}
所以我在浏览器中收到一个带有“login+not+found”的输出。
我相信这个问题与这部分有关:
if (strlen ($password) < 8 || strlen($password) > 25) {
$error_message = 'password+issue';
header ("Location: /signup/error/$error_message");
exit();
}
$repeatPassword = $_POST['repeat_password'];
if ( $repeatPassword !== $password){
$error_message = 'password+issue';
header("Location: /signup/error/$error_message");
exit();
}
try{
$q = $db->prepare('INSERT INTO users (name, last_name, age, email, password)
VALUES (:name, :last_name, :age, :email, :password)');
$hashedpassword = password_hash($password, PASSWORD_DEFAULT);
$q -> bindValue(':name', $firstName);
$q -> bindValue(':last_name', $lastName);
$q -> bindValue(':age', $age);
$q -> bindValue(':email', $email);
$q -> bindValue(':password', $hashedpassword);
$q->execute();
$user = $q->fetchAll();
$newUser = 'Signup+Successful';
header("Location: /login/success/$newUser");
exit();
} catch(PDOException $ex){
echo $ex;
}
解决方案
您可以password_verify
用于验证登录凭据。这是密码验证
推荐阅读
- javascript - DOM - javaScript getAttribute
- c# - 如何在 void Update 中执行一次代码?
- java - 字符串格式化程序如果值小于 10,则使用 3 个变量语法以 HH:MM:SS 格式添加前导零 java
- python - 将 lxml.objectify.StringElement 转换为元组时,各个元素仍然是字符串
- python-3.x - 如果 ret 为 True,为什么 cv2.VideoCapture read() 方法不返回帧?
- javascript - React.js - react-player 如何播放本地视频
- macos - Mac动态库中的动态符号表?
- android - 检查云 Firestore 数据库中是否已存在用户名、电子邮件和电话号码数据
- spring-boot - Spring boot Authenticate Rest API using Google OAuth2 以及如何使用 Postman 进行测试
- elm - 野榆反应堆工艺?