Request a new password using username only We don't want to use email id for request a new password.
How can we accomplish this without customizing/touching to core module.
User module accepts either username or email to reset password.. Code goes below in user module...

/**
 * Form builder; Request a password reset.
 *
 * @ingroup forms
 * @see user_pass_validate()
 * @see user_pass_submit()
 */
function user_pass() {
  global $user;

  $form['name'] = array(
    '#type' =&gt; 'textfield',
    '#title' =&gt; t('Username or e-mail address'),
    '#size' =&gt; 60,
    '#maxlength' =&gt; max(USERNAME_MAX_LENGTH, EMAIL_MAX_LENGTH),
    '#required' =&gt; TRUE,
    '#default_value' =&gt; isset($_GET['name']) ? $_GET['name'] : '',
  );
  // Allow logged in users to request this also.
  if ($user-&gt;uid &gt; 0) {
    $form['name']['#type'] = 'value';
    $form['name']['#value'] = $user-&gt;mail;
    $form['mail'] = array(
      '#prefix' =&gt; '&lt;p&gt;',
      '#markup' =&gt;  t('Password reset instructions will be mailed to %email. You must log out to use the password reset link in the e-mail.', array('%email' =&gt; $user-&gt;mail)),
      '#suffix' =&gt; '&lt;/p&gt;',
    );
  }
  $form['actions'] = array('#type' =&gt; 'actions');
  $form['actions']['submit'] = array('#type' =&gt; 'submit', '#value' =&gt; t('E-mail new password'));

  return $form;
}

function user_pass_validate($form, &amp;$form_state) {
  $name = trim($form_state['values']['name']);
  // Try to load by email.
  $users = user_load_multiple(array(), array('mail' =&gt; $name, 'status' =&gt; '1'));
  $account = reset($users);
  if (!$account) {
    // No success, try to load by name.
    $users = user_load_multiple(array(), array('name' =&gt; $name, 'status' =&gt; '1'));
    $account = reset($users);
  }
  if (isset($account-&gt;uid)) {
    form_set_value(array('#parents' =&gt; array('account')), $account, $form_state);
  }
  else {
    form_set_error('name', t('Sorry, %name is not recognized as a user name or an e-mail address.', array('%name' =&gt; $name)));
  }
}


You need to implement hook_form_alter in your own custom module and alter above form validation to add your own which accepts only username... You can achieve using custom module with out touching Drupal core... In hook form alter check for form id user_pass and override validate handlers like below..

$form['#validate'] = array('custom_module_user_pass_validation');

function custom_module_user_pass_validation(($form, &amp;$form_state) {

}