Вот еще одно решение нашел. Добавить в свой модуль в файл MODULE.module. Мб кто не хочет модули подключать:
<?php/** * Implements hook_form_alter(). */ function MODULE_form_user_login_form_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state) { // Allow login with email. array_unshift($form['#validate'], 'MODULE_user_login_form_validate');
// Change the field label. $form['name']['#title'] = new \Drupal\Core\StringTranslation\TranslatableMarkup('Email or Username'); }
/** * Callback to check for a valid email for login. */ function MODULE_user_login_form_validate(array &$form, \Drupal\Core\Form\FormStateInterface $form_state) { if (!$form_state->isValueEmpty('name') && \Drupal::service('email.validator')->isValid($form_state->getValue('name'))) { // Try to find a user name for this email. if ($user = user_load_by_mail($form_state->getValue('name'))) { $form_state->setValue('name', $user->getUsername()); } } }?>
Комментарии
Может лучше что-то типа https://www.drupal.org/project/ulogin
.
модуль LoginToboggan
Он только для Drupal7..
https://www.drupal.org/project/login_emailusername
https://www.drupal.org/project/email_registration вот, чисто под вашу задачу и ничего лишнего.
Вот еще одно решение нашел. Добавить в свой модуль в файл MODULE.module. Мб кто не хочет модули подключать:
<?php/**
* Implements hook_form_alter().
*/
function MODULE_form_user_login_form_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state) {
// Allow login with email.
array_unshift($form['#validate'], 'MODULE_user_login_form_validate');
// Change the field label.
$form['name']['#title'] = new \Drupal\Core\StringTranslation\TranslatableMarkup('Email or Username');
}
/**
* Callback to check for a valid email for login.
*/
function MODULE_user_login_form_validate(array &$form, \Drupal\Core\Form\FormStateInterface $form_state) {
if (!$form_state->isValueEmpty('name') && \Drupal::service('email.validator')->isValid($form_state->getValue('name'))) {
// Try to find a user name for this email.
if ($user = user_load_by_mail($form_state->getValue('name'))) {
$form_state->setValue('name', $user->getUsername());
}
}
}?>