Войти по электронной почте вместо имени пользователя

12

Я не могу найти, можно ли изменить систему входа в систему, используя пару (электронная почта, пароль) вместо (имя пользователя, пароль).

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

Хулио Герра
источник

Ответы:

19

Оба Войти Сани и регистрация по электронной почте модули позволяют пользователям использовать свою электронную почту при входе в систему .


источник
Напоминаем, что LoginToboggan имеет другой (не говоря уже о проблемах ) подход к утверждению администратором: drupal.org/node/1069414
cptstarling
0

Разработчик переместил модуль, который отвечает вашим потребностям, из песочницы на страницу проекта: https://www.drupal.org/project/login_email

Модуль существует как 7.x-1.x-dev. Он работает как есть ... похоже, небольшая помощь может превратить это в официальный релиз.

JoeMaine
источник
0

Чтобы разрешить как имя пользователя, так и адрес электронной почты: сначала добавьте валидатор

function YOURMODULE_form_user_login_alter(&$form, &$form_state, $form_id) {
    $form['#validate'][1] = 'YOURMODULE_form_user_login_replace_email_validate';
    $form['#validate'][2] = 'user_login_authenticate_validate';
    $form['#validate'][3] = 'user_login_final_validate';
}

затем проверьте, выглядит ли адрес электронной почты (содержит @, буквы до и после @ и как минимум 1 '.' после @). Если это так, чем заменить адрес электронной почты на имя пользователя:

function YOURMODULE_form_user_login_replace_email_validate(&$form, &$form_state) {

    $name = $form_state['values']['name'];
    if (strpos($name, '@')) {
        $mailParts = explode('@', $name);
        if ((int)count($mailParts) === 2) {
            $extParts = explode('.', $mailParts[1]);
            if (count($extParts) > 1) {
                $query = db_select('users', 'u');
                $query->distinct();
                $query->fields('u', ['uid']);
                $query->fields('u', ['name']);
                $query->fields('u', ['mail']);
                $query->condition('u.mail', $name, '=');
                $result = $query->execute()->fetchAllAssoc('name');

                if (!empty($result)) {
                    $name = array_keys($result)[0];
                    $form_state['values']['name'] = $name;
                }
            }
        }
    }
}

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

VikDru
источник