Inicie sesión por correo electrónico en lugar de nombre de usuario

12

No puedo encontrar si es posible o no cambiar el sistema de inicio de sesión utilizando la pareja (correo electrónico, contraseña) en lugar de (nombre de usuario, contraseña).

Creo que las personas nunca recuerdan sus nombres de usuario cuando no están disponibles como querían, por lo que tuvieron que agregar un número al final ...

Julio Guerra
fuente

Respuestas:

0

El desarrollador ha movido un módulo que satisface sus necesidades desde el sandbox a la página del proyecto: https://www.drupal.org/project/login_email

El módulo existe como 7.x-1.x-dev Funciona como está ... parece que un poco de ayuda puede convertir esto en un lanzamiento oficial.

JoeMaine
fuente
0

Para permitir tanto el nombre de usuario como el correo electrónico: primero agregue el validador

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

luego verifique si parece una dirección de correo electrónico (contiene @, letras antes y después de @ y al menos 1 '.' después de @). Si es así, reemplace el correo electrónico por nombre de usuario:

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

Tuve una situación específica cuando tuve que agregar la autenticación basada en correo electrónico al sitio de trabajo con muchos usuarios que dejaron la autenticación "antigua" funcionando, y lo hice de esa manera.

VikDru
fuente