首页 > 解决方案 > 在数据库中使用 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;
}

标签: php

解决方案


您可以password_verify用于验证登录凭据。这是密码验证


推荐阅读