1

语境

我的应用程序在服务器上为多个“全局用户”处理 FTP 帐户(每个用户都有多个 FTP 帐户)。当用户注册时,他将获得他的第一个 FTP 帐户,其凭据与他的全局帐户相同。

例如,如果用户使用myusernamemypassword注册,则将保留两个实体:

  • 具有这些凭据和盐的主帐户。
  • 第一个 FTP 帐户,我希望拥有完全相同的凭据(相同的用户名、相同的密码、相同的 salt)。

问题

我使用postPersistDoctrine 事件来创建FTP 帐户。当用户注册(持久化)时,该事件会自动创建一个与该用户关联的FTP 帐户实体,具有相同的凭据。这是来自的代码示例postPersist

// $user is the entity passed through the event args ($args->getEntity()).
$ftp = new FTPAccount();
$ftp->setUsername($user->getUsername());
$ftp->setSalt($user->getSalt());
$ftp->setPassword($user->getPassword());

注意:两个实体使用相同的密码编码器,这就是为什么复制密码哈希和盐是合适的。

但问题是:Symfony 认为$user->getPassword()是明文,因此一旦FTP 帐户实体被持久化,它就会重新散列它。这是由于我的security.yml文件的这一部分:

security:
    encoders:
        FTPAccount: sha512

考虑以下事实:

  • 我无法获取用户的明文密码postPersist,它已经被散列了。
  • 我并不总是有散列密码(在这里,我有它,因为它是第一个FTP 帐户

有没有办法让 Symfony 绕过这个实体实例的密码散列?

4

0 回答 0