Global $user object isn't always "Fully Loaded" I have a Drupal 6 module that implements hook_user() to add a custom property on op='load';

mymodule_user($op, &amp;$edit, &amp;$account, $category = NULL) {
  $account-&gt;external_id = mymodule_get_user_external_id($account-&gt;uid);
}


In modules, I access the global $user object. What I find is sometimes it has my ->external_id property, and sometimes it doesn't.

As a result, I end up having to check to see if my custom property is set, and if not, call user_load()

if(isset($GLOBALS['user']-&gt;external_id)) {
  $account = $GLOBALS['user'];
} else {
  $account = user_load($GLOBALS['user']-&gt;uid);
}


Yuck! Is this a known problem, or does it sound like I'm doing something wrong?
Nope, you are doing it right as this is a known issue/behavior.  Check out http://api.drupal.org/api/drupal/developer%21globals.php/global/user/6 for a lot more information on it.  A link from there, http://drupal.org/node/57287, talks to your point directly (it is for D7 but is germaine to D6).