Connectez-vous par e-mail au lieu du nom d'utilisateur

12

Je ne trouve pas s'il est possible ou non de changer le système de connexion en utilisant le couple (email, mot de passe) au lieu de (nom d'utilisateur, mot de passe).

Je pense que les gens ne se souviennent jamais de leurs noms d'utilisateur lorsqu'ils n'étaient pas disponibles comme ils le voulaient et ont donc dû ajouter un numéro à la fin ...

Julio Guerra
la source

Réponses:

19

Les modules Login Toboggan et Email Registration permettent à vos utilisateurs d'utiliser leur courrier électronique lorsqu'ils se connectent.


la source
Rappelez-vous que LoginToboggan a une approche différente (pour ne pas dire problématique ) des approbations des administrateurs: drupal.org/node/1069414
cptstarling
0

Le développeur a déplacé un module qui répond à vos besoins du bac à sable à la page du projet: https://www.drupal.org/project/login_email

Le module existe en tant que 7.x-1.x-dev. Il fonctionne tel quel ... il semble qu'un peu d'aide puisse en faire une version officielle.

JoeMaine
la source
0

Afin d'autoriser à la fois le nom d'utilisateur et l'e-mail: ajoutez d'abord un validateur

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

puis vérifiez si elle ressemble à une adresse e-mail (contient @, des lettres avant et après @ et au moins 1 '.' après @). Si c'est le cas, remplacez l'email par le nom d'utilisateur:

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

J'ai eu une situation particulière lorsque j'ai dû ajouter une authentification par courrier électronique au site de travail avec beaucoup d'utilisateurs laissant l'authentification "ancienne" fonctionner, et je l'ai fait de cette manière.

VikDru
la source