user_authenticate

Definition

user_authenticate($name, $pass)
user/user.module, line 976

Code

<?php
function user_authenticate($name, $pass) {
  global $user;

  // Try to log in the user locally. Don't set $user unless successful.
  if ($account = user_load(array('name' => $name, 'pass' => $pass, 'status' => 1))) {
    $user = $account;
    return $user;
  }

  // Strip name and server from ID:
  if ($server = strrchr($name, '@')) {
    $name = substr($name, 0, strlen($name) - strlen($server));
    $server = substr($server, 1);
  }

  // When possible, determine corresponding external auth source. Invoke
  // source, and log in user if successful:
  if ($server && ($result = user_get_authmaps("$name@$server"))) {
    if (module_invoke(key($result), 'auth', $name, $pass, $server)) {
      $user = user_external_load("$name@$server");
      watchdog('user', t('External load by %user using module %module.', array('%user' => $name .'@'. $server, '%module' => key($result))));
    }
  }

  // Try each external authentication source in series. Register user if
  // successful.
  else {
    foreach (module_implements('auth') as $module) {
      if (module_invoke($module, 'auth', $name, $pass, $server)) {
        if ($server) {
          $name .= '@'. $server;
        }
        $registered_user = user_load(array('name' => $name));
        if (!$registered_user->uid) { // Register this new user.
          $userinfo = array(
            'name' => $name, 
            'pass' => user_password(), 
            'init' => $name, 
            'status' => 1, 
            'access' => time(),
          );
          if ($server) {
            $userinfo["authname_$module"] = $name;
          }
          $user = user_save('', $userinfo);
          watchdog('user', t('New external user: %user using module %module.', array('%user' => $name, '%module' => $module)), WATCHDOG_NOTICE, l(t('edit'), 'user/'. $user->uid .'/edit'));
          break;
        }
      }
    }
  }
  return $user;
}
?>