Увійдіть по електронній пошті замість імені користувача


12

Я не можу знайти, чи можна або не змінити систему входу, використовуючи пару (електронну пошту, пароль) замість (ім’я користувача, пароль).

Я думаю, що люди ніколи не пам’ятають своїх імен користувачів, коли вони недоступні, як вони хотіли, і тому доводилося додавати число в кінці цього…

Відповіді:


19

Як модулі Toboggan для входу, так і модулі реєстрації електронної пошти дозволяють вашим користувачам використовувати свою електронну пошту під час входу.


Майте в виду , що LoginToboggan має іншу (не сказати проблематично ) підхід затвердження адміністратора: drupal.org/node/1069414
cptstarling

0

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

Модуль існує як 7.x-1.x-dev. Він працює як є ... схоже, трохи допомога може перетворити це на офіційний випуск.


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;
                }
            }
        }
    }
}

У мене була специфічна ситуація, коли мені довелося додати автентифікацію на основі електронної пошти на робочий сайт із великою кількістю користувачів, які залишають «стару» автентифікацію справною, і я це робив таким чином.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.