1

我正在尝试在 PHP 中使用 crypt() 对用户进行身份验证。这是我在登录页面中的代码:

$valid = MemberDB::isValidMember($email_address, $password);
if ($valid == TRUE) {
    $_SESSION['is_valid_member'] = TRUE;
    header("Location: ../welcome/");
    } else {
    $login_message = 'log in';
    include('./view/login.php');
    }

这是应该带回 True 或 False 的函数:

public static function isValidMember($email_address, $password) {
    $db = Database::getDB();
    $query = "SELECT member_ID, password
              FROM members
              WHERE email_address = :email_address";
    $statement = $db->prepare($query);
    $statement->bindValue(':email_address', $email_address);
    $statement->execute();
    $row = $statement->fetch();
    $statement->closeCursor();
    return $row ? crypt($password, $row['password']) : FALSE;
}

目前,无论我输入什么密码,它都会让我进入。当我对 $valid 执行 var_dump 时,它会返回加密密码的 98 个字符字符串,因此我知道 $valid 不等于 TRUE。请帮忙!

谢谢。

4

2 回答 2

2

代替

return $row ? crypt($password, $row['password']) : FALSE;

return $row ? ($row['password'] == crypt($password, $row['password'])) : FALSE;
于 2012-06-27T19:11:39.927 回答
1

Crypt 返回一个散列字符串,而不是一个布尔值。您需要将该散列字符串与已知散列进行比较,如果它们相同则返回:

return $row ? crypt($password, $row['password']) == $row['password'] : FALSE;
于 2012-06-27T19:13:41.480 回答