Entre por email em vez de nome de usuário

12

Não consigo descobrir se é possível ou não alterar o sistema de logon usando o casal (email, senha) em vez de (nome de usuário, senha).

Acho que as pessoas nunca se lembram de seus nomes de usuário quando não estavam disponíveis como desejavam e, portanto, tiveram que adicionar um número no final ...

Julio Guerra
fonte

Respostas:

0

O desenvolvedor mudou um módulo que atende às suas necessidades da sandbox para a página do projeto: https://www.drupal.org/project/login_email

O módulo existe como 7.x-1.x-dev. Funciona como está ... parece que um pouco de assistência pode transformar isso em um lançamento oficial.

JoeMaine
fonte
0

Para permitir o nome de usuário e o email: primeiro adicione o validador

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

verifique se parece com o endereço de e-mail (contém @, letras antes e depois de @ e pelo menos 1 '.' depois de @). Se for, substitua o email pelo nome de usuário:

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

Eu tive uma situação específica quando precisei adicionar a autenticação baseada em email ao site de trabalho, com muitos usuários deixando a autenticação "antiga" funcionando, e fiz dessa maneira.

VikDru
fonte