密码哈希:创建另一个实体而不重新哈希

时间:2013-08-28 16:12:50

标签: php symfony hash password-encryption

上下文

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

例如,如果用户使用 myusername mypassword 进行注册,则会保留两个实体:

  • 主要帐户,包含这些凭据和盐。
  • 第一个FTP帐户,我想拥有完全相同的凭据(相同的用户名,相同的密码,相同的盐)。

问题

我使用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中获取用户的明文密码,它已经过哈希。
  • 我并不总是有哈希密码(在这里,我有它,因为它是第一个 FTP帐户

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

0 个答案:

没有答案