Sự kiện / Quan sát viên để thay đổi mật khẩu của khách hàng?


10

Tôi đang tìm cách nối vào sự kiện khách hàng thay đổi mật khẩu. Vì vậy, nếu ai đó thay đổi mật khẩu trong lối vào của khách hàng, tôi muốn gửi e-mail ở đâu đó.

Tôi đã tham khảo danh sách tại http://www.nicksays.co.uk/magento-events-cheat-sheet-1-7/ nhưng không có gì giống như một sự kiện để thay đổi mật khẩu.


Bất kỳ ý tưởng nào mà người quan sát / sự kiện sẽ sử dụng khi khách hàng đặt lại mật khẩu của mình bằng cách sử dụng /customer/account/resetpassword/?id=ab&token=xyz?
oschloebe

Câu trả lời:


9

Cảm ơn Fabian Blechschmidt, tôi đã đưa ra những điều sau đây phù hợp với tôi (sử dụng sự kiện này 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;
}

Tôi không thích yêu cầu trên bài đăng, nhưng nếu nó hoạt động, thật tuyệt :-)
Fabian Blechschmidt

Nó không hoạt động, vâng. :-) Tôi đã thử một số phương thức và các hàm trợ giúp để lấy mật khẩu nhưng tất cả những gì tôi có thể truy xuất là hàm băm mật khẩu nhưng tôi cần nó có thể đọc được và đó là những gì đối tượng POST cung cấp. Cảm ơn một lần nữa!
oschloebe

Đừng làm những điều kỳ lạ với mật khẩu, như lưu nó vào văn bản gốc hoặc tiền điện tử xấu ;-)
Fabian Blechschmidt

1
Tôi sẽ không hứa! Chỉ cần gửi nó đến PRISM. ;-)
oschloebe

Điều này không hoạt động như là để thiết lập lại mật khẩu vì chỉ có passwordconfirmationtrong dữ liệu bài viết. đã thử nghiệm với v1.9
pHiL

5

Có một cái nhìn vào mã.

Bạn có thể sử dụng customer_save_aftersự kiện và chỉ cần kiểm tra

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

Có thể giá trị này được đặt lại, sau đó bạn phải sử dụng save_before, nhưng tôi khuyên bạn nên gửi thư sau khi lưu. Vì vậy, nếu giá trị này không thể đọc được trong sự kiện sau, hãy sao chép nó sang thuộc tính khác để có nó bằng tay trong sự kiện sau.


Cảm ơn cho đến nay. Theo như tôi có thể thấy sự kiện cũng được kích hoạt khi một khách hàng đăng ký thành công. Có cách nào / phương pháp tôi có thể kiểm tra xem khách hàng đã đăng ký chưa và mật khẩu có thực sự thay đổi không?
oschloebe

trong sự kiện _b Before bạn có thể kiểm tra xem ID đã tồn tại trên đối tượng chưa
Fabian Blechschmidt

4

Tôi muốn làm một cái gì đó tương tự, nhưng tôi đã kết thúc với mã của anh ấy:

Tôi móc vào 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);
}

Tôi nghĩ rằng sẽ sạch sẽ và an toàn hơn một chút so với việc sử dụng Mật khẩu!


Mage::app()->getRequest()->getParam('id')là null trong sự kiện này. cũng trong preispatch. passwordconfirmationcó sẵn trong Mage::app()->getRequest()->getParams()tho. (Đã thử nghiệm với v1.9)
pHiL
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.