¿Evento / observador para el cambio de contraseña del cliente?

10

Estoy buscando una forma de conectar con el caso de que los clientes cambien sus contraseñas. Entonces, si alguien cambia la contraseña en la interfaz del cliente, me gustaría enviar un correo electrónico a alguna parte.

Consulté la lista en http://www.nicksays.co.uk/magento-events-cheat-sheet-1-7/ pero nada parece un evento para cambiar las contraseñas.

oschloebe
fuente
¿Alguna idea de qué observador / evento usar cuando un cliente restablece su contraseña /customer/account/resetpassword/?id=ab&token=xyz?
oschloebe

Respuestas:

9

Gracias a Fabian Blechschmidt, se me ocurrió lo siguiente que funciona para mí (usando el 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;
}
oschloebe
fuente
No me gusta la solicitud en la publicación, pero si funciona, genial :-)
Fabian Blechschmidt
Funciona, sí. :-) Probé varios métodos y funciones auxiliares para obtener la contraseña, pero todo lo que pude recuperar fue el hash de contraseña, pero necesitaba que fuera legible y eso es lo que ofrecía el objeto POST. ¡Gracias de nuevo!
oschloebe
No haga cosas raras con la contraseña, como guardarla en texto sin formato o una criptografía incorrecta ;-)
Fabian Blechschmidt
1
¡No lo haré, prometido! Solo enviándolo a PRISM. ;-)
oschloebe
esto no funciona como es de restablecimiento de contraseña ya que sólo hay passwordy confirmationen los datos posteriores. probado con v1.9
pHiL
5

Echa un vistazo al código.

Puede usar el customer_save_afterevento y simplemente verificar

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

Tal vez este valor se restablezca, luego debe usarlo save_before, pero le recomiendo enviar el correo después de guardarlo. Entonces, si este valor no es legible en el evento posterior, cópielo en otro atributo para tenerlo a mano en el evento posterior.

Fabian Blechschmidt
fuente
Gracias hasta ahora Hasta donde puedo ver, el evento también se activa cuando un cliente se registra con éxito. ¿Hay alguna forma / método que pueda verificar si el cliente ya estaba registrado y la contraseña realmente cambió?
oschloebe
en el evento _before puede verificar si ya existe una ID en el objeto
Fabian Blechschmidt
4

Quería hacer algo similar, pero terminé con su código:

Me enganché a 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 poco más limpio y "más seguro" que fallar con la contraseña en sí, ¡creo!

Barry Carlyon
fuente
Mage::app()->getRequest()->getParam('id')es nulo en este evento. También en predispatch. passwordy confirmationestá disponible en Mage::app()->getRequest()->getParams()tho. (Probado con v1.9)
pHiL