É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.


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;
}

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.


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!


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.