将 $hash 用于方法 setParameter()

Using $hash for the method setParameter()

我想知道用户是否登录。

public function findByExampleField($data) {
    return $this->createQueryBuilder('u')
        ->select('u.email, u.password')
        ->where('u.email = :email')
        ->andWhere('u.password = :password')
        ->setParameter('email', $data['email'])
        ->setParameter('password', $data['password']) // <-- the problem
        ->setMaxResults(10)
        ->getQuery()
        ->getResult()
    ;
}

由于密码是散列的,我需要先验证一下。在这种情况下,我需要使用 password_verify($data['password'], $hash)。我的问题是第二个参数。如何声明变量 $hash?

获取用户并放弃密码的 WHERE 子句。然后你可以得到哈希密码并在PHP.

中查看它

而且我猜每个电子邮件地址不会超过一行,因此您也可以放弃 MaxRecords。

无法通过哈希搜索。

password_hash 生成的散列是唯一的,每次都包含一个随机盐。

连续调用 password_hash 将产生不同的结果。这很容易通过以下方式验证:

var_dump(password_hash('1', PASSWORD_DEFAULT) == password_hash('1', PASSWORD_DEFAULT));
// bool(false)

您可以 password_verify 散列,因为它包含所有必要的信息(散列+盐+算法),但是重新生成相同的散列以在数据库中查找它是不可能的。

基本上你试图做的事情不仅是个坏主意,而且是不可能的。

您要做的是通过用户名或电子邮件(无论您拥有用户的唯一标识符)获取用户,然后验证密码:

$user = $userRepository->findUserByEmail($email);

$loggedIn = password_verify($inputPassword, $user->getPassword());