Czy klienci mogą zalogować się przy użyciu numeru klienta zamiast adresu e-mail

12

Chcę utworzyć stronę logowania, która używa przypisanego numeru klienta zamiast jego adresu e-mail. Sposób, w jaki konfigurowana jest moja firma, na oddzielnej platformie eComms, uzyskują dostęp do konta za pomocą numeru klienta, ponieważ są wieloma menedżerami kont dla jednego konta. Tworzę dla nich konta, a następnie przypisuję numer klienta, którego następnie używają do logowania, za pomocą hasła.

Każda pomoc byłaby bardzo mile widziana.

Alex WG
źródło
Obawiam się, że jest to zbyt duże forum dla tej strony. Tak, jest to możliwe, ale byłoby dużo przepisywania kodu i zmiany szablonów itp., Aby to działało.
David Manners,
Dziękuję David, myślałem, że tak może być, ale myślałem, że warto spróbować.
Alex WG,

Odpowiedzi:

8

Możliwe jest zaimplementowanie podstawowej logiki przy niewielkim niestandardowym kodzie:

Napisz obserwatora controller_predispatch_customer_account_loginPost, sprawdź, czy wysłany adres e-mail ( username) nie wygląda jak adres e-mail. W takim przypadku wyszukaj klienta według numeru klienta i zastąp pole nazwy użytkownika w danych POST rzeczywistym adresem e-mail znalezionego klienta.

Przykładowy kod obserwatora:

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

Następnie controller_postdispatch_customer_account_loginPostwprowadź adres e-mail w sesji z powrotem na numer klienta, jeśli jest ustawiony. W przeciwnym razie komunikaty o błędach przy nieudanych logowaniach będą zawierać adres e-mail zamiast numeru.

Przykładowy kod obserwatora:

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

Inne rzeczy do rozważenia:

  • Zastosuj tę samą logikę do formularza „zapomniałem hasła”
  • Zdecyduj, czy chcesz użyć wbudowanego increment_idnumeru klienta, który możesz włączyć w konfiguracji systemu, w obszarze Konfiguracja klienta> Utwórz nowe opcje konta> Wygeneruj przyjazny dla klienta identyfikator klienta
Fabian Schmengler
źródło
6

Dlaczego tylko liczby ...

https://github.com/diglin/Diglin_Username

Dzięki temu rozszerzeniu możesz logować się przy użyciu nazw użytkowników. Oczywiście można bez trudu zablokować te „nazwy użytkowników” do „numerów kont”.

Kot Henry'ego
źródło
Myślę, że to powinno zadziałać. Będę musiał wykonać pewne modyfikacje. Aby działało tak, jak chcę.
Alex WG,