试试这个模块,LoginToboggan:http://drupal.org/project/logintoboggan
或者,自定义模块里面,alter一下form,在user_form加一个validate,如下:
if ($form_id == 'user_login' || $form_id == 'user_login_block') {
$form['#validate'] = is_array($form['#validate']) ? $form['#validate'] : array();
array_unshift($form['#validate'],'drupal001_user_or_email_login_validate');
}
//自定义验证函数
function drupal001_user_or_email_login_validate($form, &$form_state) {
if (isset($form_state['values']['name']) && strpos($form_state['values']['name'], '@') !== false) {
$name = drupal001_user_get_name_by_email($form_state['values']['name']);
if ($name) {
form_set_value($form['name'], $name, $form_state);
}
}
}