I created a custom attribute customer "cm_telephone", then i rewrite Customer/controllers/AccountController.php
loginPostAction()
function to customise it for login with the email or phone number. It works, just I wanted to know what you think about my code.
The code:
public function loginPostAction()
{
if (!$this->_validateFormKey()) {
$this->_redirect('*/*/');
return;
}
if ($this->_getSession()->isLoggedIn()) {
$this->_redirect('*/*/');
return;
}
$session = $this->_getSession();
if ($this->getRequest()->isPost()) {
$login = $this->getRequest()->getPost('login');
if (!empty($login['username']) && !empty($login['password'])) {
//the phone number condition
if (strpos($login['username'], '@') === false){
Mage::log('Customer has entered a phone number ');
$customer = Mage::getModel('customer/customer')
->getCollection()
->addAttributeToFilter('cm_telephone', $login['username'])
->getFirstItem();
if($login['username'] == $customer->getCmTelephone()){
$login['username'] = $customer->getEmail();
}
}
//end phone number condition
try {
$session->login($login['username'], $login['password']);
if ($session->getCustomer()->getIsJustConfirmed()) {
$this->_welcomeCustomer($session->getCustomer(), true);
}
} catch (Mage_Core_Exception $e) {
switch ($e->getCode()) {
case Mage_Customer_Model_Customer::EXCEPTION_EMAIL_NOT_CONFIRMED:
$value = $this->_getHelper('customer')->getEmailConfirmationUrl($login['username']);
$message = $this->_getHelper('customer')->__('This account is not confirmed. <a href="%s">Click here</a> to resend confirmation email.', $value);
break;
case Mage_Customer_Model_Customer::EXCEPTION_INVALID_EMAIL_OR_PASSWORD:
$message = $e->getMessage();
break;
default:
$message = $e->getMessage();
}
$session->addError($message);
$session->setUsername($login['username']);
} catch (Exception $e) {
// Mage::logException($e); // PA DSS violation: this exception log can disclose customer password
}
} else {
$session->addError($this->__('Login and password are required.'));
}
}
$this->_loginPostRedirect();
}
I found this but I didn't want to use an event and I keep the email address and I add the phone.