External login should set custom properties in user object
I've done the same thing in D7. I see you're using the user-login-form directly and skipping over UID = 1 .... thats ok.

What you want todo is essentially copy the PHP logic of user_external_login_register into your own function, you're already calling your own *_authenticate() function to process the login page.

So you would change your:

// This sets up the external user with Drupal by creating a local entry.
// If they don't exist they are added.
user_external_login_register($name, "myy");


To like:

// This sets up the external user with Drupal by creating a local entry.
// If they don't exist they are added.
MYMODULE_user_external_login_register($name, "myy", $external_data);


and define the necessary function that mimics the D7 login logic AND adds you're own fields for the user upon creation (I mean literally copy the D7 function body into your function body and tweak as needed)  -- I've added additional fields using the Field UI found at /admin/people to my User accounts as seen below.

So I have this function to do that:

function MYMODULE_auth_idstaff_user_external_login_register($name, $module, $external_ldap_details) {
  $account = user_external_load($name);
  if (!$account) {
    // Register this new user.
    $roles = user_roles();
    $userinfo = array(
      'name' =&gt; $name,
      'pass' =&gt; user_password(),
      'init' =&gt; $name,
      'status' =&gt; 1,
      'access' =&gt; REQUEST_TIME,
      // This is where we are different from the default function and add our fields.
      'roles'        =&gt; array(array_search('staff', $roles) =&gt; 1),
      'mail' =&gt; $external_ldap_details['mail'],
      'field_first_name'   =&gt; array(LANGUAGE_NONE =&gt; array( 0 =&gt; array('value' =&gt; $external_ldap_details['first_name']))),
      'field_last_name'    =&gt; array(LANGUAGE_NONE =&gt; array( 0 =&gt; array('value' =&gt; $external_ldap_details['last_name']))),
    );
    $account = user_save(drupal_anonymous_user(), $userinfo);
    // Terminate if an error occurred during user_save().
    if (!$account) {
      drupal_set_message(t("Error saving user account."), 'error');
      return;
    }
    user_set_authmaps($account, array("authname_$module" =&gt; $name));
  }

  // Log user in.
  $form_state['uid'] = $account-&gt;uid;
  user_login_submit(array(), $form_state);
}


I've actually done the same exact thing in Symfony 1.4.x a few years ago ... except it was all object oriented lol (because Symfony's forms are Objects).