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.


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

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.


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!


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.