Événement / Observateur de changement de mot de passe client?

10

Je cherche un moyen de m'adapter en cas de changement de mot de passe des clients. Donc, si quelqu'un change le mot de passe dans le frontend du client, j'aimerais envoyer un e-mail quelque part.

J'ai consulté la liste sur http://www.nicksays.co.uk/magento-events-cheat-sheet-1-7/ mais rien ne ressemble à un événement pour changer les mots de passe.

oschloebe
la source
Avez-vous une idée de quel observateur / événement utiliser lorsqu'un client réinitialise son mot de passe en utilisant /customer/account/resetpassword/?id=ab&token=xyz?
oschloebe

Réponses:

9

Grâce à Fabian Blechschmidt, j'ai trouvé ce qui fonctionne pour moi (en utilisant l'événement customer_save_before):

public function detectPwdChange(Varien_Event_Observer $observer) {
    $event              = $observer->getEvent();
    $customer           = $event->getCustomer();
    $postData           = Mage::app()->getRequest()->getPost();

    if($customer instanceof Mage_Customer_Model_Customer && !$customer->isObjectNew()) {

        if( $postData['change_password'] == 1 && $postData['current_password'] != $postData['password'] ) {
            // Do something
        }
    }

    return $this;
}
oschloebe
la source
Je n'aime pas la demande sur le post, mais si ça marche, super :-)
Fabian Blechschmidt
Ça marche, oui. :-) J'ai essayé plusieurs méthodes et fonctions d'aide pour obtenir le mot de passe, mais tout ce que j'ai pu récupérer était le hachage du mot de passe, mais j'avais besoin qu'il soit lisible et c'est ce que l'objet POST offrait. Merci encore!
oschloebe
Ne faites pas de choses étranges avec le mot de passe, comme l'enregistrer en clair ou en mauvais crypto ;-)
Fabian Blechschmidt
1
Je ne le ferai pas, promis! Il suffit de l'envoyer à PRISM. ;-)
oschloebe
ce travail ne marche pas tout comme le mot de passe remis à zéro car il est seulement passwordet confirmationdans les données post. testé avec v1.9
pHiL
5

Jetez un œil au code.

Vous pouvez utiliser l' customer_save_afterévénement et vérifier simplement

/app/code/core/Mage/Customer/controllers/AccountController.php:724
$customer->setChangePassword(1);

Peut-être que cette valeur est réinitialisée, alors vous devez l'utiliser save_before, mais je recommande d'envoyer le courrier après l'enregistrement. Donc, si cette valeur n'est pas lisible dans l'événement After, copiez-la dans un autre attribut pour l'avoir à la main dans l'événement After.

Fabian Blechschmidt
la source
Merci jusqu'ici. Autant que je sache, l'événement est également déclenché lorsqu'un client s'est enregistré avec succès. Existe-t-il un moyen / une méthode pour vérifier si le client était déjà enregistré et si le mot de passe a réellement changé?
oschloebe
dans l'événement _before, vous pouvez vérifier si un ID existe déjà sur l'objet
Fabian Blechschmidt
4

Je voulais faire quelque chose de similaire, mais je me suis retrouvé avec son code à la place:

Je me suis accroché controller_action_postdispatch_customer_account_resetpasswordpost

function resetpasswordpost(Varien_Event_Observer $observer) {
    $customer_id = Mage::app()->getRequest()->getParam('id');
    $customer = Mage::getModel('customer/customer')->load($customer_id);
}

Un peu plus propre et "plus sûr" que de se moquer du mot de passe lui-même, je pense!

Barry Carlyon
la source
Mage::app()->getRequest()->getParam('id')est nul dans cet événement. également en pré-expédition. passwordet confirmationest disponible dans Mage::app()->getRequest()->getParams()tho. (Testé avec v1.9)
pHiL