web-dev-qa-db-fra.com

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

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 ...

12
Julio Guerra

Les modules Login Toboggan et Inscription par e-mail permettent à vos utilisateurs d'utiliser leur e-mail lorsqu'ils se connectent.

19
user842

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.

0
VikDru

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.

0
JoeMaine