예제 #1
0
 /**
  * Create a new WordPress user with the specified identity URL and user data.
  *
  * @param string $identity_url OpenID to associate with the newly
  * created account
  * @param array $user_data array of user data
  */
 function create_new_user($identity_url, &$user_data)
 {
     global $wpdb, $openid;
     // Identity URL is new, so create a user
     @(include_once ABSPATH . 'wp-admin/upgrade-functions.php');
     // 2.1
     @(include_once ABSPATH . WPINC . '/registration-functions.php');
     // 2.0.4
     $user_data['user_login'] = $wpdb->escape(WordPressOpenID_Logic::generate_new_username($identity_url));
     $user_data['user_pass'] = substr(md5(uniqid(microtime())), 0, 7);
     $user_id = wp_insert_user($user_data);
     $openid->log->debug("wp_create_user( {$user_data} )  returned {$user_id} ");
     if ($user_id) {
         // created ok
         $user_data['ID'] = $user_id;
         // XXX this all looks redundant, see WordPressOpenID_Logic::set_current_user
         $openid->log->debug("OpenIDConsumer: Created new user {$user_id} : {$username} and metadata: " . var_export($user_data, true));
         $user = new WP_User($user_id);
         if (!wp_login($user->user_login, $user_data['user_pass'])) {
             $openid->error = 'User was created fine, but wp_login() for the new user failed. ' . 'This is probably a bug.';
             $openid->action = 'error';
             $openid->log->err($openid->error);
             return;
         }
         // notify of user creation
         wp_new_user_notification($user->user_login);
         wp_clearcookie();
         wp_setcookie($user->user_login, md5($user->user_pass), true, '', '', true);
         // Bind the provided identity to the just-created user
         global $userdata;
         $userdata = get_userdata($user_id);
         $store = WordPressOpenID_Logic::getStore();
         $store->insert_identity($user_id, $identity_url);
         $openid->action = 'redirect';
         if (!$user->has_cap('edit_posts')) {
             $redirect_to = '/wp-admin/profile.php';
         }
     } else {
         // failed to create user for some reason.
         $openid->error = 'OpenID authentication successful, but failed to create WordPress user. ' . 'This is probably a bug.';
         $openid->action = 'error';
         $openid->log->error($openid->error);
     }
 }