Wydarzenie / Obserwator zmiany hasła klienta?

10

Szukam sposobu na zahaczenie o zmianę hasła przez klientów. Więc jeśli ktoś zmieni hasło w interfejsie klienta, chciałbym gdzieś wysłać e-mail.

Przejrzałem listę na stronie http://www.nicksays.co.uk/magento-events-cheat-sheet-1-7/, ale nic nie wygląda jak zdarzenie do zmiany hasła.

oschloebe
źródło
Masz pojęcie, jakiego obserwatora / zdarzenia użyć, gdy klient resetuje hasło /customer/account/resetpassword/?id=ab&token=xyz?
oschloebe

Odpowiedzi:

9

Dzięki Fabianowi Blechschmidtowi wpadłem na pomysł, który działa dla mnie (korzystając ze zdarzenia 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
źródło
Nie podoba mi się prośba o post, ale jeśli zadziała, świetnie :-)
Fabian Blechschmidt
To działa, tak. :-) Próbowałem kilku metod i funkcji pomocniczych, aby uzyskać hasło, ale wszystko, co udało mi się odzyskać, to skrót hasła, ale potrzebowałem go w sposób czytelny i to właśnie oferuje obiekt POST. Dzięki jeszcze raz!
oschloebe
Nie rób dziwnych rzeczy z hasłem, takich jak zapisywanie go jako zwykły tekst lub złe szyfrowanie ;-)
Fabian Blechschmidt
1
Nie zrobię tego, obiecałem! Po prostu wysyłam to do PRISM. ;-)
oschloebe
Ta praca nie robi jak jest zresetować hasło jak jest tylko passwordi confirmationw post danych. testowany z v1.9
pHiL
5

Zajrzyj do kodu.

Możesz użyć customer_save_afterwydarzenia i po prostu sprawdzić

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

Być może ta wartość jest zresetowana, to musisz użyć save_before, ale zalecam wysłać pocztę po zapisaniu. Jeśli więc tej wartości nie można odczytać w zdarzeniu po, skopiuj ją do innego atrybutu, aby mieć ją ręcznie w zdarzeniu późniejszym.

Fabian Blechschmidt
źródło
Dziękuję do tej pory. O ile widzę, zdarzenie jest również uruchamiane, gdy klient pomyślnie się zarejestruje. Czy istnieje sposób / metoda, dzięki której mogę sprawdzić, czy klient jest już zarejestrowany, a hasło faktycznie się zmieniło?
oschloebe
w zdarzeniu _wcześniej możesz sprawdzić, czy identyfikator już istnieje na obiekcie
Fabian Blechschmidt
4

Chciałem zrobić coś podobnego, ale zamiast tego skończyłem z jego kodem:

Zahaczyłem 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);
}

Myślę, że jest trochę bardziej czystszy i „bezpieczniejszy” niż grzebanie w samym Hasle!

Barry Carlyon
źródło
Mage::app()->getRequest()->getParam('id')ma wartość null w tym wydarzeniu. również w predispatch. passwordi confirmationjest dostępny w tys Mage::app()->getRequest()->getParams(). (Testowany z
wersją