Ereignis / Beobachter für Kundenpasswortänderung?

10

Ich suche nach einer Möglichkeit, mich an den Fall zu binden, dass Kunden ihre Passwörter ändern. Wenn also jemand das Passwort im Kunden-Frontend ändert, möchte ich irgendwo eine E-Mail senden.

Ich habe die Liste unter http://www.nicksays.co.uk/magento-events-cheat-sheet-1-7/ konsultiert, aber nichts sieht nach einem Ereignis zum Ändern von Passwörtern aus.

oschloebe
quelle
Haben Sie eine Idee, welchen Beobachter / welches Ereignis Sie verwenden sollen, wenn ein Kunde sein Passwort mit zurücksetzt /customer/account/resetpassword/?id=ab&token=xyz?
oschloebe

Antworten:

9

Dank Fabian Blechschmidt habe ich Folgendes gefunden, das für mich funktioniert (mithilfe der Veranstaltung 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
quelle
Ich mag die Anfrage auf dem Post nicht, aber wenn es funktioniert, großartig :-)
Fabian Blechschmidt
Es funktioniert, ja. :-) Ich habe verschiedene Methoden und Hilfsfunktionen ausprobiert, um das Passwort zu erhalten, aber alles, was ich abrufen konnte, war der Passwort-Hash, aber ich brauchte ihn einfach lesbar und das bot das POST-Objekt an. Danke noch einmal!
oschloebe
Mach keine seltsamen Dinge mit dem Passwort, wie es im Klartext oder in einer schlechten Krypto zu speichern ;-)
Fabian Blechschmidt
1
Ich werde nicht, versprochen! Senden Sie es einfach an PRISM. ;-)
oschloebe
Dies funktioniert nicht wie beim Zurücksetzen des Passworts, da es nur passwordund confirmationin Post-Daten gibt. getestet mit v1.9
pHiL
5

Schauen Sie sich den Code an.

Sie können das customer_save_afterEreignis verwenden und einfach nach suchen

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

Möglicherweise wird dieser Wert zurückgesetzt, dann müssen Sie verwenden save_before, aber ich empfehle, die Mail nach dem Speichern zu senden. Wenn dieser Wert im After-Ereignis nicht lesbar ist, kopieren Sie ihn in ein anderes Attribut, damit er im After-Ereignis von Hand angezeigt wird.

Fabian Blechschmidt
quelle
Vielen Dank bisher. Soweit ich sehen kann, wird das Ereignis auch ausgelöst, wenn sich ein Kunde erfolgreich registriert hat. Gibt es eine Möglichkeit / Methode, mit der ich überprüfen kann, ob der Kunde bereits registriert und das Passwort tatsächlich geändert wurde?
oschloebe
Im _before-Ereignis können Sie überprüfen, ob bereits eine ID für das Objekt vorhanden ist
Fabian Blechschmidt
4

Ich wollte etwas Ähnliches machen, aber ich bekam stattdessen seinen Code:

Ich habe mich eingehakt 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);
}

Ein bisschen sauberer und "sicherer" als mit dem Passwort selbst herumzuspielen, denke ich!

Barry Carlyon
quelle
Mage::app()->getRequest()->getParam('id')ist in diesem Fall null. auch in prädispatch. passwordund confirmationist verfügbar in Mage::app()->getRequest()->getParams()tho. (Getestet mit v1.9)
pHiL