Evento / osservatore per la modifica della password del cliente?


10

Sto cercando un modo per agganciare l'evento dei clienti che cambiano le loro password. Quindi, se qualcuno cambia la password nel frontend del cliente, vorrei inviare un'e-mail da qualche parte.

Ho consultato l'elenco su http://www.nicksays.co.uk/magento-events-cheat-sheet-1-7/ ma nulla sembra un evento per cambiare le password.


Hai idea di quale osservatore / evento utilizzare quando un cliente reimposta la sua password /customer/account/resetpassword/?id=ab&token=xyz?
Oschloebe,

Risposte:


9

Grazie a Fabian Blechschmidt, ho ideato quanto segue per me (usando l'evento 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;
}

Non mi piace la richiesta sul post, ma se funziona benissimo :-)
Fabian Blechschmidt,

Funziona, sì. :-) Ho provato diversi metodi e funzioni di supporto per ottenere la password, ma tutto quello che sono riuscito a recuperare era l'hash della password, ma ne avevo bisogno leggibile ed è quello che offriva l'oggetto POST. Grazie ancora!
Oschloebe,

Non fare cose strane con la password, come salvarla in testo in chiaro o con crittografia errata ;-)
Fabian Blechschmidt,

1
Non lo farò, promesso! Basta inviarlo a PRISM. ;-)
oschloebe,

questo non funziona come per la reimpostazione della password in quanto esiste solo passworde confirmationnei dati di post. testato con v1.9
pHiL

5

Dai un'occhiata al codice.

È possibile utilizzare l' customer_save_afterevento e controllare per

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

Forse questo valore viene resettato, quindi devi usarlo save_before, ma ti consiglio di inviare la posta dopo il salvataggio. Quindi, se questo valore non è leggibile nell'evento after, copiarlo in un altro attributo per averlo manualmente nell'evento after.


Grazie finora. Per quanto posso vedere, l'evento viene attivato anche quando un cliente si è registrato correttamente. Esiste un modo / metodo per verificare se il cliente era già registrato e la password è stata effettivamente modificata?
Oschloebe,

nel caso precedente, è possibile verificare se esiste già un ID sull'oggetto
Fabian Blechschmidt,

4

Volevo fare qualcosa di simile, ma invece ho finito con il suo codice:

Mi sono agganciato 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 po 'più pulito e "più sicuro" che sfuggire alla stessa password, penso!


Mage::app()->getRequest()->getParam('id')è nullo in questo evento. anche in pre-corrispondenza. passworded confirmationè disponibile in Mage::app()->getRequest()->getParams()tho. (Testato con v1.9)
pHiL
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.