私は解決策を見つけたようです。それが最善であるかどうかは分かりませんが、これまでのところうまくいきます。私は、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);
}
}
出典
2017-03-15 09:17:34
Chi
あなたが「変更」で何を意味するか、より具体的に説明してください!何(以前の値)から変更?どこを変えたの? $ idと 'NEW'を比較するとき、私はfe_usersの新しい作成についてだと思いますが、fe_usersは複数の方法で作成できます。 BEからFEのさまざまな拡張機能まで、各FE拡張機能には多くのオプションがあります。 –
いいえ誰かがバックエンドでユーザーを編集したときに新しいエントリーについてではなく、パスワードが変更されたかどうかを保存した後に見たいと思う。編集者はパスワードをそのまま、または新しいパスワードを入力しましたか? – Chi