Evento / Observador para alteração da senha do cliente?

10

Estou procurando uma maneira de se conectar ao evento de os clientes mudarem suas senhas. Portanto, se alguém alterar a senha na interface do cliente, gostaria de enviar um e-mail para algum lugar.

Consultei a lista em http://www.nicksays.co.uk/magento-events-cheat-sheet-1-7/, mas nada se parece com um evento para alterar senhas.

oschloebe
fonte
Alguma idéia de qual observador / evento usar quando um cliente redefine sua senha usando /customer/account/resetpassword/?id=ab&token=xyz?
Oschloebe

Respostas:

9

Graças a Fabian Blechschmidt, criei o seguinte que funciona para mim (usando o 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
fonte
Eu não gosto do pedido no post, mas se funcionar, ótimo :-) #
Fabian Blechschmidt
Isso funciona, sim. :-) Tentei vários métodos e funções auxiliares para obter a senha, mas tudo o que consegui recuperar foi o hash da senha, mas precisava ser legível e é isso que o objeto POST ofereceu. Obrigado novamente!
oschloebe
Não faça coisas estranhas com a senha, como salvando-o em texto simples ou mau cripto ;-)
Fabian Blechschmidt
1
Não prometo! Apenas enviando para o PRISM. ;-)
oschloebe
isso não funciona como é para redefinir a senha, pois há apenas passworde confirmationnos dados de publicação. testado com v1.9
pHiL
5

Dê uma olhada no código.

Você pode usar o customer_save_afterevento e apenas verificar se há

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

Talvez esse valor seja redefinido, é necessário usá-lo save_before, mas recomendo enviar o e-mail após o salvamento. Portanto, se esse valor não for legível no evento after, copie-o para outro atributo para tê-lo manualmente no evento after.

Fabian Blechschmidt
fonte
Obrigado até agora. Tanto quanto posso ver, o evento também é acionado quando um cliente se registra com sucesso. Existe uma maneira / método de verificar se o cliente já foi registrado e a senha realmente mudou?
Oschloebe
em caso _Antes você pode verificar se um ID já existe no objeto
Fabian Blechschmidt
4

Eu queria fazer algo semelhante, mas acabei com o código dele:

Eu liguei 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);
}

Um pouco mais limpo e "mais seguro" do que brincar com a própria senha, eu acho!

Barry Carlyon
fonte
Mage::app()->getRequest()->getParam('id')é nulo neste evento. também no predispatch. passworde confirmationestá disponível em Mage::app()->getRequest()->getParams()tho. (Testado com v1.9)
pHiL