我的应用程序处理服务器上的FTP帐户,为几个“全局用户”(每个用户都有几个FTP帐户)。当用户注册时,他将获得他的第一个FTP帐户,其凭据与其全球帐户相同。
例如,如果用户使用 myusername 和 mypassword 进行注册,则会保留两个实体:
我使用postPersist
Doctrine事件创建 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
中获取用户的明文密码,它已经过哈希。有没有办法让Symfony绕过这个实体实例的密码哈希?