通过电子邮件而不是用户名登录


12

我找不到使用对(电子邮件,密码)而不是(用户名,密码)更改登录系统的方法。

我认为人们永远不会记住他们想要的用户名,因此必须在其末尾添加一个数字...

Answers:




0

为了同时允许用户名和电子邮件:首先添加验证器

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

然后检查其外观是否类似于电子邮件地址(包含@,@前后的字母以及@后至少1个“。”)。如果是这样,则用用户名替换电子邮件:

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

当我不得不将基于电子邮件的身份验证添加到工作站点时,我遇到了一个特殊的情况,许多用户离开了“旧的”身份验证,而我以这种方式做到了。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.