Symfony5:isPasswordValid仅在使用纯密码时返回true



我遇到了一个以前从未遇到过的Symfony 5.2的奇怪问题。

我正在为一个API实现一个登录,看来的方法

UserPasswordEncoderInterface::isPasswordValid没有正确验证我的密码,返回false。

这是我的安全编码器

encoders:
# use your user class name here
AppDomainSecurityModelsUser:
# Use native password encoder
# This value auto-selects the best possible hashing algorithm
# (i.e. Sodium when available).
algorithm: auto

我的用户创建:

$user = (new User())->setEmail($userData['email']);
$encodedPassword = $this->encoder->encodePassword($user, $userData['password']);
$user->setPassword($encodedPassword);
if (!empty($userData['roles'])) {
$user->setRoles(explode(',', $userData['roles']));
}
return $user;

然后我的用户被正确地保存在数据库中:

MariaDB [blog]> select * from userG
*************************** 1. row ***************************
id: 5
email: toto@toto.fr
password: $argon2id$v=19$m=65536,t=4,p=1$MmQySDNJSTJQUEoxTFFDbQ$Rb0A80bVnvLbXauc/1yU9DndH7v88b/LQ9ein6lBFKM
roles: NULL
apiToken: NULL

现在,当我登录时,我检查密码如下:

private function validatePasswordOrFail(string $userPassword, User $existingUser): void
{
if(!$this->encoder->isPasswordValid($existingUser, $userPassword))
{
LoginException::userNotFoundOrInvalidPassword();
}
}

在这里,我总是处于我的状态。转储后,$existingUser是好的,$userPassword是好的。

奇怪的是,如果我更改db中的密码值,对于像这样的普通密码

MariaDB [blog]> select * from userG
*************************** 1. row ***************************
id: 5
email: toto@toto.fr
password: mypassword
roles: NULL
apiToken: NULL

现在isPasswordValid返回true,我不会进入我的状态。

我缺少什么?

注意:我的用户实现了Symfony\Component\Security\Core\User\UserInterface,我的方法getSalt((仍然是空的

/**
* @inheritDoc
*/
public function getSalt()
{
}

但在过去,我总是这样处理,从来没有遇到过这个问题。

我刚刚想明白了。

我正在使用工厂来创建我的用户。

是这家工厂在设置密码之前对其进行编码。

事实上,我也在我的存储库中使用这个工厂,所以当我从数据库中获取哈希密码并创建用户时,我会重新哈希哈希密码。。。

相关内容

  • 没有找到相关文章

最新更新