É possível implementar a lógica básica com pouco código personalizado:
Escreva para um observador controller_predispatch_customer_account_loginPost
, verifique se o endereço de email publicado ( username
) não se parece com um endereço de email. Nesse caso, procure o cliente pelo número do cliente e substitua o campo de nome de usuário nos dados do POST pelo endereço de e-mail real do cliente encontrado.
Código de exemplo de observador:
$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());
}
}
Em seguida controller_postdispatch_customer_account_loginPost
, substitua o endereço de email na sessão de volta ao número do cliente, se estiver definido. Caso contrário, as mensagens de erro nos logins sem êxito conterão o endereço de email em vez do número.
Código de exemplo de observador:
$emailAddress = Mage::getSingleton('customer/session')->getUsername();
if ($emailAddress) {
$customerNumber = Mage::getModel('customer/customer')->loadByEmail($emailAddress)
->getCustomerNumber();
}
Mage::getSingleton('customer/session')->setUsername($customerNumber);
Outras coisas a considerar:
- Aplique a mesma lógica ao formulário "esqueci a senha"
- Decida se você deseja usar o
increment_id
número de cliente interno, que pode ser ativado na configuração do sistema em Configuração do cliente> Criar novas opções de conta> Gerar ID de cliente amigável ao ser humano