Подія / спостерігач за зміною пароля клієнта?


10

Я шукаю спосіб підключитись у випадку, коли клієнти змінять свої паролі. Тож якщо хтось змінить пароль у передній частині клієнта, я хотів би кудись надіслати електронний лист.

Я ознайомився зі списком на веб- сайті http://www.nicksays.co.uk/magento-events-cheat-sheet-1-7/, але нічого не схоже на подію для зміни паролів.


Будь-яка ідея, який спостерігач / подія використовувати, коли клієнт скидає свій пароль, використовуючи /customer/account/resetpassword/?id=ab&token=xyz?
oschloebe

Відповіді:


9

Завдяки Фабіану Блешшмідту я придумав таке, що працює для мене (використовуючи подію 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;
}

Мені не подобається запит на пошту, але якщо він працює, чудово :-)
Fabian Blechschmidt

Це працює, так. :-) Я спробував декілька методів і допоміжних функцій, щоб отримати пароль, але все, що мені вдалося відновити, - це хеш паролів, але мені це було потрібно для читання, і саме це запропонував об'єкт POST. Знову дякую!
oschloebe

Не робіть дивних речей із паролем, як, наприклад, збереження його в
простому

1
Я не буду, обіцяв! Просто відправляємо його в ПРИЗМ. ;-)
oschloebe

це не працює, як для скидання пароля, оскільки є лише дані passwordта confirmationдані в пості. перевірено на v1.9
pHiL

5

Погляньте на код.

Ви можете використовувати customer_save_afterподію та просто перевірити

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

Можливо, це значення перезавантажено, тоді вам доведеться скористатися save_before, але я рекомендую відправити пошту після збереження. Отже, якщо це значення не читабельно в наступній події, скопіюйте його в інший атрибут, щоб мати його вручну після події.


Дякую поки що. Наскільки я бачу, подія також спрацьовує, коли клієнт успішно зареєструвався. Чи є спосіб / спосіб я можу перевірити, чи був клієнт уже зареєстрований і пароль дійсно змінений?
oschloebe

у події _before ви можете перевірити, чи вже існує ідентифікатор на об'єкті
Fabian Blechschmidt

4

Я хотів зробити щось подібне, але я натомість отримав його код:

Я зачепився 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);
}

Я думаю, трохи більш чистий і "безпечніший", ніж підробляти з самим паролем!


Mage::app()->getRequest()->getParam('id')є недійсним у цьому випадку. також у передвідправці. passwordі confirmationдоступний у Mage::app()->getRequest()->getParams()тхо. (Випробувано з v1.9)
pHiL
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.