Có thể triển khai logic cơ bản với ít mã tùy chỉnh:
Viết một người quan sát controller_predispatch_customer_account_loginPost
, kiểm tra xem địa chỉ email đã đăng ( username
) không giống địa chỉ email. Trong trường hợp này, tra cứu khách hàng theo số khách hàng và thay thế trường tên người dùng trong dữ liệu POST bằng địa chỉ email thực tế của khách hàng tìm thấy.
Mã quan sát mẫu:
$request = $observer->getControllerAction()->getRequest();
$username = $request->getPost('username');
if (false === strpos($username, '@')) {
$customer = Mage::getModel('customer/customer')
->getCollection()
->addAttributeToFilter('customer_number', $username)
->getFirstItem();
if ($customer && $customer->getEmail()) {
$request->setPost('username', $customer->getEmail());
}
}
Sau đó controller_postdispatch_customer_account_loginPost
, thay thế địa chỉ email trong phiên trở lại số khách hàng, nếu nó được đặt. Nếu không, thông báo lỗi khi đăng nhập không thành công sẽ chứa địa chỉ email thay vì số.
Mã quan sát mẫu:
$emailAddress = Mage::getSingleton('customer/session')->getUsername();
if ($emailAddress) {
$customerNumber = Mage::getModel('customer/customer')->loadByEmail($emailAddress)
->getCustomerNumber();
}
Mage::getSingleton('customer/session')->setUsername($customerNumber);
Những điều khác cần xem xét:
- Áp dụng logic tương tự cho mẫu "quên mật khẩu"
- Quyết định xem bạn có muốn sử dụng
increment_id
số khách hàng tích hợp, bạn có thể bật trong cấu hình hệ thống trong Cấu hình khách hàng> Tạo tùy chọn tài khoản mới> Tạo ID khách hàng thân thiện với con người