更改客户密码的事件/观察者?


10

我正在寻找一种方法来挂接客户更改密码的事件。因此,如果有人在客户前端中更改密码,我想在某处发送电子邮件。

我确实在http://www.nicksays.co.uk/magento-events-cheat-sheet-1-7/上查阅了该列表,但是看起来没有什么可以更改密码。


知道客户使用重置密码时要使用什么观察者/事件/customer/account/resetpassword/?id=ab&token=xyz吗?
oschloebe 2013年

Answers:


9

感谢Fabian Blechschmidt,我想到了以下对我有用的东西(使用event 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;
}

我不喜欢帖子中的请求,但如果它
有用

是的,是的。:-)我尝试了几种方法和辅助函数来获取密码,但是我只能获取密码哈希,但是我需要它易于阅读,而这正是POST对象提供的。再次感谢!
oschloebe 2013年

不要对密码做任何奇怪的事情,例如将其保存为明文或错误的密码;-)
Fabian Blechschmidt

1
我不会,答应过!只需将其发送给PRISM。;-)
oschloebe 2013年

这不起作用,因为重置密码是唯一的,password并且confirmation在帖子数据中。已通过v1.9测试
pHiL

5

看一下代码。

您可以使用该customer_save_after事件,只需检查

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

也许此值已重置,那么您必须使用save_before,但是我建议保存后发送邮件。因此,如果此值在after事件中不可读,则将其复制到另一个属性中,以手动添加到after事件中。


到目前为止谢谢。据我所知,当客户成功注册时,也会触发该事件。有什么方法/方法可以检查客户是否已经注册并且密码是否实际更改?
oschloebe 2013年

在_before事件中,您可以检查对象上是否已存在ID
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')在此事件中为null。也在派遣中。passwordconfirmationMage::app()->getRequest()->getParams()tho中可用。(已通过v1.9测试)
pHiL
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.