Anstelle des Benutzernamens per E-Mail anmelden

12

Ich kann nicht feststellen, ob es möglich ist, das Anmeldesystem mithilfe des Paares (E-Mail, Passwort) anstelle von (Benutzername, Passwort) zu ändern.

Ich denke, die Leute erinnern sich nie an ihre Benutzernamen, wenn sie nicht verfügbar waren, wie sie wollten, und mussten deshalb am Ende eine Nummer hinzufügen ...

Julio Guerra
quelle

Antworten:

0

Der Entwickler hat ein Modul, das Ihren Anforderungen entspricht, von der Sandbox auf die Projektseite verschoben: https://www.drupal.org/project/login_email

Das Modul existiert als 7.x-1.x-dev. Es funktioniert so wie es ist. Es sieht so aus, als ob ein bisschen Hilfe dies in eine offizielle Veröffentlichung verwandeln kann.

JoeMaine
quelle
0

Um sowohl den Benutzernamen als auch die E-Mail-Adresse zuzulassen, fügen Sie zunächst einen Prüfer hinzu

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

Überprüfen Sie dann, ob die E-Mail-Adresse wie folgt aussieht (enthält @, Buchstaben vor und nach @ und mindestens 1 '.' nach @). Wenn dies der Fall ist, ersetzen Sie die E-Mail-Adresse durch den Benutzernamen:

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

Ich hatte eine spezielle Situation, in der ich eine E-Mail-basierte Authentifizierung zur Arbeitswebsite hinzufügen musste, bei der viele Benutzer die "alte" Authentifizierung beibehalten hatten, und dies tat ich auf diese Weise.

VikDru
quelle