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

Réponses:



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.


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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.