Могут ли клиенты войти в систему с помощью номера клиента вместо адреса электронной почты?

12

Я хочу создать страницу входа, которая использует назначенный номер клиента вместо его адреса электронной почты. При настройке моего бизнеса на отдельной платформе eComms они получают доступ к своей учетной записи с помощью номера клиента, поскольку они являются несколькими менеджерами учетных записей для одной учетной записи. Я создаю для них учетные записи, а затем назначаю номер клиента, который они затем используют для входа, с паролем.

Любая помощь будет принята с благодарностью.

Алекс РГ
источник
Я боюсь, что это слишком доска для этого сайта. Да, это возможно, но было бы много переписать код, изменить шаблоны и т. Д., Чтобы это работало.
Дэвид Мэннерс
Спасибо, Дэвид, я думал, что это может быть так, но я думал, что это стоит того.
Алекс РГ

Ответы:

8

Можно реализовать базовую логику с небольшим количеством пользовательского кода:

Напишите наблюдателю controller_predispatch_customer_account_loginPost, проверьте username, не выглядит ли опубликованный адрес электронной почты ( ) как адрес электронной почты. В этом случае найдите клиента по номеру клиента и замените поле имени пользователя в данных POST фактическим адресом электронной почты найденного клиента.

Пример кода наблюдателя:

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

Затем controller_postdispatch_customer_account_loginPost, замените адрес электронной почты в сеансе обратно на номер клиента, если он установлен. В противном случае сообщения об ошибках при неудачных входах в систему будут содержать адрес электронной почты вместо номера.

Пример кода наблюдателя:

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

Другие вещи для рассмотрения:

  • Примените ту же логику к форме "забыл пароль"
  • Решите, хотите ли вы использовать встроенный increment_idномер клиента, который можно включить в конфигурации системы в разделе « Конфигурация клиента»> «Создать параметры новой учетной записи»> «Создать удобный для пользователя идентификатор клиента».
Фабиан Шменглер
источник
6

Почему просто цифры ...

https://github.com/diglin/Diglin_Username

С этим расширением вы можете сделать так, чтобы люди входили с именами пользователей. Очевидно, что вы можете заблокировать эти «имена пользователей» на «номера счетов» без особых проблем.

Кот Генри
источник
Я думаю, что это должно работать. Я воображение, мне придется сделать определенное количество настроек. Чтобы получилось так, как я хочу.
Алекс РГ