将 $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());
我想知道用户是否登录。
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());