This blog describes about how to login using both email and username in Drupal 7. All of you know we could login using only username in Drupal 7.
I've tried to login using email without any contrib modules. Finally i got the code. First alter form to add custom form validation. In custom form validation, get the name from user table by email and set that value into name field in form. Let see the code:
Now you can login using both username and email. I've hope you know how to login using both username and email in Drupal 7.
I've tried to login using email without any contrib modules. Finally i got the code. First alter form to add custom form validation. In custom form validation, get the name from user table by email and set that value into name field in form. Let see the code:
<?php
/**
* Implement hook_form_alter().
*/
function phponwebsites_form_alter(&$form, &$form_state, $form_id) {
if ($form_id == "user_login" || $form_id == "user_login_block") {
$form['name']['#title'] = t('Username or E-mail Address');
// Ensure a valid validate array.
$form['#validate'] = is_array($form['#validate']) ? $form['#validate'] : array();
// login using username or email address
array_unshift($form['#validate'],'phponwebsites_user_login_validate');
}
}
/**
* Implement phponwebsites_user_login_validate()
*
* Return name by its email address
*/
function phponwebsites_user_login_validate($form, &$form_state) {
if (isset($form_state['values']['name']) && strpos($form_state['values']['name'], '@') !== false) {
$name = db_query("SELECT name FROM {users} WHERE LOWER(mail) = LOWER(:name)", array(':name' => $form_state['values']['name']))->fetchField();
}
if (isset($name)) {
form_set_value($form['name'], $name, $form_state);
}
}
/**
* Implement hook_form_alter().
*/
function phponwebsites_form_alter(&$form, &$form_state, $form_id) {
if ($form_id == "user_login" || $form_id == "user_login_block") {
$form['name']['#title'] = t('Username or E-mail Address');
// Ensure a valid validate array.
$form['#validate'] = is_array($form['#validate']) ? $form['#validate'] : array();
// login using username or email address
array_unshift($form['#validate'],'phponwebsites_user_login_validate');
}
}
/**
* Implement phponwebsites_user_login_validate()
*
* Return name by its email address
*/
function phponwebsites_user_login_validate($form, &$form_state) {
if (isset($form_state['values']['name']) && strpos($form_state['values']['name'], '@') !== false) {
$name = db_query("SELECT name FROM {users} WHERE LOWER(mail) = LOWER(:name)", array(':name' => $form_state['values']['name']))->fetchField();
}
if (isset($name)) {
form_set_value($form['name'], $name, $form_state);
}
}
Now you can login using both username and email. I've hope you know how to login using both username and email in Drupal 7.
Related articles:
Add new menu item into already created menu in Drupal 7
Add class into menu item in Drupal 7
Create menu tab programmatically in Drupal 7
Add custom fields to search api index in Drupal 7
Clear views cache when insert, update and delete a node in Drupal 7
Create a page without header and footer in Drupal 7
Redirect users after login in Drupal 7
Add new menu item into already created menu in Drupal 7
Add class into menu item in Drupal 7
Create menu tab programmatically in Drupal 7
Add custom fields to search api index in Drupal 7
Clear views cache when insert, update and delete a node in Drupal 7
Create a page without header and footer in Drupal 7
Redirect users after login in Drupal 7