Event / Observer untuk perubahan kata sandi pelanggan?

10

Saya mencari cara untuk menghubungkan ke acara pelanggan mengubah kata sandi mereka. Jadi, jika seseorang mengubah kata sandi di frontend pelanggan, saya ingin mengirim email ke suatu tempat.

Saya memang berkonsultasi daftar di http://www.nicksays.co.uk/magento-events-cheat-sheet-1-7/ tetapi tidak ada yang tampak seperti acara untuk mengubah kata sandi.

oschloebe
sumber
Adakah pengamat / peristiwa apa yang digunakan ketika seorang pelanggan mengatur ulang kata sandinya /customer/account/resetpassword/?id=ab&token=xyz?
oschloebe

Jawaban:

9

Berkat Fabian Blechschmidt, saya datang dengan yang berikut ini yang cocok untuk saya (menggunakan acara 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
sumber
Saya tidak suka permintaan pada pos, tetapi jika berhasil, bagus :-)
Fabian Blechschmidt
Itu berhasil, ya. :-) Saya mencoba beberapa metode dan fungsi pembantu untuk mendapatkan kata sandi tetapi yang bisa saya retreive adalah kata sandi hash tetapi saya membutuhkannya agar mudah dibaca dan itulah yang ditawarkan objek POST. Terima kasih lagi!
oschloebe
Jangan lakukan hal-hal aneh dengan kata sandi, seperti menyimpannya dalam plaintext atau bad crypto ;-)
Fabian Blechschmidt
1
Aku tidak akan, berjanji! Hanya mengirimnya ke PRISM. ;-)
oschloebe
ini tidak berfungsi seperti untuk mereset kata sandi karena hanya ada passworddan confirmationdalam data pos. diuji dengan v1.9
pHiL
5

Lihatlah kodenya.

Anda dapat menggunakan customer_save_afteracara dan hanya memeriksa

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

Mungkin nilai ini diatur ulang, maka Anda harus menggunakan save_before, tetapi saya sarankan untuk mengirim email setelah menyimpan. Jadi, jika nilai ini tidak dapat dibaca di acara setelah, salin ke atribut lain untuk memilikinya secara langsung di acara setelah.

Fabian Blechschmidt
sumber
Terima kasih sejauh ini Sejauh yang saya bisa lihat, acara ini juga dipicu ketika pelanggan berhasil mendaftar. Apakah ada cara / metode yang dapat saya periksa apakah pelanggan sudah terdaftar dan kata sandi benar-benar berubah?
oschloebe
dalam acara _before Anda dapat memeriksa apakah ID sudah ada pada objek
Fabian Blechschmidt
4

Saya ingin melakukan sesuatu yang serupa, tetapi saya berakhir dengan kodenya:

Saya terhubung 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);
}

Sedikit lebih bersih dan "lebih aman" daripada memikirkan kata sandi itu sendiri, saya pikir!

Barry Carlyon
sumber
Mage::app()->getRequest()->getParam('id')tidak ada dalam acara ini. juga dalam predispatch. passworddan confirmationtersedia di Mage::app()->getRequest()->getParams()tho. (Diuji dengan v1.9)
pHiL