Est-il possible pour les clients de se connecter avec un numéro de client au lieu d'une adresse e-mail

12

Je souhaite créer une page de connexion qui utilise un numéro de client attribué au lieu de son adresse e-mail. La façon dont mon entreprise est configurée, sur une plate-forme eComms distincte, accède à son compte avec un numéro de client car ce sont plusieurs gestionnaires de compte pour un seul compte. Je leur crée des comptes, puis j'attribue un numéro de client, qu'ils utilisent ensuite pour se connecter, avec un mot de passe.

Toute aide serait grandement appréciée.

Alex WG
la source
Je crains que ce soit trop board pour ce site. Oui, c'est possible, mais il y aurait beaucoup de réécriture de code et de changement de modèles, etc. pour que cela fonctionne.
David Manners du
Merci David, je pensais que ça pouvait être le cas, mais je pensais que ça valait le coup.
Alex WG

Réponses:

8

Il est possible d'implémenter la logique de base avec peu de code personnalisé:

Écrivez un observateur controller_predispatch_customer_account_loginPost, vérifiez si l'adresse e-mail publiée ( username) ne ressemble pas à une adresse e-mail. Dans ce cas, recherchez le client par numéro de client et remplacez le champ du nom d'utilisateur dans les données POST par l'adresse e-mail réelle du client trouvé.

Exemple de code d'observateur:

$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());
    }
}

Ensuite controller_postdispatch_customer_account_loginPost, remplacez l'adresse e-mail de la session par le numéro de client, s'il est défini. Sinon, les messages d'erreur sur les connexions infructueuses contiendront l'adresse e-mail au lieu du numéro.

Exemple de code d'observateur:

$emailAddress = Mage::getSingleton('customer/session')->getUsername();
if ($emailAddress) {
      $customerNumber = Mage::getModel('customer/customer')->loadByEmail($emailAddress)
          ->getCustomerNumber();
}
Mage::getSingleton('customer/session')->setUsername($customerNumber);

Autres choses à considérer:

  • Appliquer la même logique au formulaire "mot de passe oublié"
  • Décidez si vous souhaitez utiliser le increment_idnuméro de client intégré , que vous pouvez activer dans la configuration du système sous Configuration client> Créer de nouvelles options de compte> Générer un ID client convivial
Fabian Schmengler
la source
6

Pourquoi juste des chiffres ...

https://github.com/diglin/Diglin_Username

Avec cette extension, les gens peuvent se connecter avec des noms d'utilisateur. De toute évidence, vous pouvez verrouiller ces «noms d'utilisateur» aux «numéros de compte» sans trop de difficulté.

Henry's Cat
la source
Je pense que cela devrait fonctionner. Je l'imagerie, je vais devoir faire une certaine quantité de personnalisation. Pour le faire fonctionner comme je veux.
Alex WG