using hook_form_alter on a same form from 2 different modules
All implementations of the hook_form_alter() will alter the user_login forms you embed in your blocks. As you observed, your author_login form alter will not be restricted to only altering the form in your author_login block.

If you want your form alters to only alter the form in the context of their respective blocks, you have to find a way to observe the block context from them. There is no easy way to properly implement this, you will either have to add additional non-standard arguments to your form builder (the arguments passed to drupal_get_form() after the form ID), or uses some sort of global states.

A cleaner solution is to use hook_forms to define new author_login and creator_login forms that simply re-use the existing user_login form as callback but have a different form id:

/**
 * Implements hook_forms().
 */
function author_login_forms($form_id, $args) {
  $forms = array();
  $forms['author_login'] = array(
    'callback' =&gt; 'user_login',
  );
  return $forms;
}


You can then simply implement a form alter specific to your author login form.

/**
 * Implements hook_form_FORM_ID_alter().
 */
function author_login_form_author_login_alter(&amp;$form, &amp;$form_state) {
  $form['#validate'][] = 'author_login_validate';
}


And finally embed this form wherever you need it with

drupal_get_form('author_login');


Repeat for the creator login form.