diff options
author | Neil Drumm <drumm@3064.no-reply.drupal.org> | 2006-05-23 02:37:48 +0000 |
---|---|---|
committer | Neil Drumm <drumm@3064.no-reply.drupal.org> | 2006-05-23 02:37:48 +0000 |
commit | 9eed2da5ab56acf0248c305cc69e5481d04bbb97 (patch) | |
tree | 03052786711a68d21a61d70e37bce61abc6af8a5 /modules/user/user.module | |
parent | 70b7809121ad00542bcd37545bf314d7215a72e6 (diff) | |
download | brdo-9eed2da5ab56acf0248c305cc69e5481d04bbb97.tar.gz brdo-9eed2da5ab56acf0248c305cc69e5481d04bbb97.tar.bz2 |
#29147 by naudefj, markus_petrux, and Moshe:
- Clean up API for authenticating users.
- Default distributed authentication server.
Diffstat (limited to 'modules/user/user.module')
-rw-r--r-- | modules/user/user.module | 36 |
1 files changed, 20 insertions, 16 deletions
diff --git a/modules/user/user.module b/modules/user/user.module index f1bce8332..e681ebbb3 100644 --- a/modules/user/user.module +++ b/modules/user/user.module @@ -156,9 +156,12 @@ function user_save($account, $array = array(), $category = 'account') { user_module_invoke('after_update', $array, $user, $category); } else { - $array['created'] = time(); $array['uid'] = db_next_id('{users}_uid'); + if (!isset($array['created'])) { // Allow 'created' to be set by hook_auth + $array['created'] = time(); + } + // Note, we wait with saving the data column to prevent module-handled // fields from being saved there. We cannot invoke hook_user('insert') here // because we don't have a fully initialized user object yet. @@ -953,6 +956,7 @@ function user_authenticate($name, $pass) { // 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: @@ -963,30 +967,30 @@ function user_authenticate($name, $pass) { // When possible, determine corresponding external auth source. Invoke // source, and log in user if successful: - if (!$user->uid && $server && $result = user_get_authmaps("$name@$server")) { + 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' => theme('placeholder', $name .'@'. $server), '%module' => theme('placeholder', key($result))))); } - else { - $error = t('Invalid password for %s.', array('%s' => theme('placeholder', $name .'@'. $server))); - } } // Try each external authentication source in series. Register user if // successful. - else if (!$user->uid && $server) { - foreach (module_list() as $module) { - if (module_hook($module, 'auth')) { - if (module_invoke($module, 'auth', $name, $pass, $server)) { - if (variable_get('user_register', 1) == 1) { - $account = user_load(array('name' => "$name@$server")); - if (!$account->uid) { // Register this new user. - $user = user_save('', array('name' => "$name@$server", 'pass' => user_password(), 'init' => "$name@$server", 'status' => 1, "authname_$module" => "$name@$server")); - watchdog('user', t('New external user: %user using module %module.', array('%user' => theme('placeholder', $name .'@'. $server), '%module' => theme('placeholder', $module))), WATCHDOG_NOTICE, l(t('edit'), 'user/'. $user->uid .'/edit')); - break; - } + else { + foreach (module_implements('auth') as $module) { + if (module_invoke($module, 'auth', $name, $pass, $server)) { + if ($server) { + $name .= '@'. $server; + } + $user = user_load(array('name' => $name)); + if (!$user->uid) { // Register this new user. + $userinfo = array('name' => $name, 'pass' => user_password(), 'init' => $name, 'status' => 1); + if ($server) { + $userinfo["authname_$module"] = $name; } + $user = user_save('', $userinfo); + watchdog('user', t('New external user: %user using module %module.', array('%user' => theme('placeholder', $name), '%module' => theme('placeholder', $module))), WATCHDOG_NOTICE, l(t('edit'), 'user/'. $user->uid .'/edit')); + break; } } } |