Zaloguj się przez e-mail zamiast nazwy użytkownika

12

Nie mogę znaleźć, czy jest możliwa zmiana systemu logowania przy użyciu pary (adres e-mail, hasło) zamiast (nazwa użytkownika, hasło).

Myślę, że ludzie nigdy nie pamiętają swoich nazw użytkowników, gdy nie są dostępne tak, jak chcieli, dlatego musieli dodać numer na końcu ...

Julio Guerra
źródło

Odpowiedzi:

0

Deweloper przeniósł moduł, który spełnia Twoje potrzeby, z piaskownicy na stronę projektu: https://www.drupal.org/project/login_email

Moduł istnieje jako 7.x-1.x-dev Działa tak, jak jest ... wygląda na to, że odrobina pomocy może przekształcić to w oficjalną wersję.

JoeMaine
źródło
0

Aby zezwolić zarówno na nazwę użytkownika, jak i adres e-mail: najpierw dodaj weryfikator

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

następnie sprawdź, czy wygląda jak adres e-mail (zawiera @, litery przed i po @ oraz co najmniej 1 '.' po @). Jeśli tak, zastąp wiadomość e-mail nazwą użytkownika:

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

Miałem specyficzną sytuację, gdy musiałem dodać uwierzytelnianie oparte na poczcie e-mail do działającej witryny z wieloma użytkownikami, którzy pozostawili „stare” uwierzytelnianie, i zrobiłem to w taki sposób.

VikDru
źródło