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

时间:2017-03-14 08:17:13

标签: php typo3 typo3-7.6.x

是否有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);
    }
}

问题是,这总是会返回一个密码,无论是新密码还是哈希密码(如果它已经存在),所以我不知道它是否是一个更改过的字段。有没有办法检查更改的字段?

1 个答案:

答案 0 :(得分:0)

好像我找到了解决方案。不确定它是否是最好的,但到目前为止它的工作原理。我意识到,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);
    }
}