É possível que os clientes façam login com um número de cliente em vez de um endereço de email

12

Desejo criar uma página de login que use um número de cliente atribuído em vez do endereço de e-mail. Da maneira como minha empresa é configurada, em uma plataforma eComms separada, eles acessam suas contas com um número de cliente porque são vários gerentes de contas para uma conta. Crio contas para eles e atribuo um número de cliente, que eles usam para fazer login, com uma senha.

Qualquer ajuda seria muito apreciada.

Alex WG
fonte
Temo que isso seja muito comum para este site. Sim, é possível, mas haveria muita reescrita de código e alteração de modelos etc. para que isso funcionasse.
David Manners
Obrigado David, pensei que poderia ser esse o caso, mas achei que poderia valer a pena tentar.
Alex WG

Respostas:

8

É 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_idnú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
Fabian Schmengler
fonte
6

Por que apenas números ...

https://github.com/diglin/Diglin_Username

Com esta extensão, você pode fazer o login das pessoas com nomes de usuário. Claramente, você pode bloquear esses 'nomes de usuário' em 'números de conta' sem muita dificuldade.

Gato de Henry
fonte
Eu acho que isso deve funcionar. Nas imagens, terei que fazer uma certa quantidade de personalização. Para fazê-lo funcionar como eu quero.
Alex WG