TYPO3 7.6 后端挂钩:检查 fe_users 密码是否已更改

TYPO3 7.6 Backend Hook: check if fe_users password was changed

是否有 TYPO3 后端钩子来检查 fe_users 密码是否已更改?我试过这个:

public function processDatamap_preProcessFieldArray(array &$fieldArray, $table, $id, \TYPO3\CMS\Core\DataHandling\DataHandler &$pObj) {
    if ($table === "fe_users" && stripos($id, 'NEW') === false){
        $pw = $fieldArray['password'];
        die($pw);
    }
}

问题是,这总是 returns 密码,要么是新密码,要么是散列密码(如果已经存在),所以我不知道它是否已更改字段。有没有办法检查更改的字段?

看来我找到了解决办法。不确定它是否是最好的,但到目前为止它有效。我意识到,processDatamap_preProcessFieldArray 是密码仍然以纯文本形式提供的地方,所以我需要使用它来使用注册表存储密码(后来它已经被散列,因此对我来说无法使用)。

processDatamap_afterDatabaseOperations 中的 fieldArray 值仅在更改值时设置,因此通过检查密码密钥是否已设置,我知道密码最初是否已更改。

所以这就是我的解决方案:

public function processDatamap_afterDatabaseOperations($status, $table, $id, $fieldArray, $pObj) {
    if ($table === "fe_users" && $status === "update" && isset($fieldArray['password'])) {
        //get the password
        $registry = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\CMS\Core\Registry');
        $pw = $registry->get('be', 'lastPassword');

        //do whatever is necessary with the plain text password...

        //remove it
        $registry->remove('be', 'lastPassword');
    }
}

public function processDatamap_preProcessFieldArray(array &$fieldArray, $table, $id, \TYPO3\CMS\Core\DataHandling\DataHandler &$pObj) {
    if ($table === "fe_users" && stripos($id, 'NEW') === false){
        $pw = $fieldArray['password'];
        $registry = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\CMS\Core\Registry');
        $registry->set('be', 'lastPassword', $pw);
    }
}