[wp-trac] [WordPress Trac] #14834: wp_insert_user errors for users without e-mail addresses

WordPress Trac wp-trac at lists.automattic.com
Wed Aug 3 04:29:33 UTC 2011


#14834: wp_insert_user errors for users without e-mail addresses
--------------------------+-----------------------------
 Reporter:  clifgriffin   |       Owner:
     Type:  defect (bug)  |      Status:  new
 Priority:  normal        |   Milestone:  Future Release
Component:  Users         |     Version:  3.0
 Severity:  normal        |  Resolution:
 Keywords:  2nd-opinion   |
--------------------------+-----------------------------
Changes (by dd32):

 * component:  General => Users


Old description:

> Greetings,
> In versions previous to WP3, it was possible to pass wp_insert_user an
> array with or without an e-mail address and the user was created without
> issue.
>
> In WP3, a check was added to determine whether or not the user already
> exists by their e-mail address.
>
> if ( !$update && ! defined( 'WP_IMPORTING' ) && email_exists($user_email)
> )
>           return new WP_Error('existing_user_email', __('This email
> address is already registered.') );
>
> The problem with this check is that it matches the admin account if you
> pass it a null or blank e-mail address.  The admin account, being created
> by the installation script, does not start with an e-mail address.
>
> This has caused one of my plugins (Simple LDAP Login) to fail. To fix
> this, I had to do this:
> if ( !function_exists('get_user_by_email') ) :
> /**
>  * Retrieve user info by email.
>  *
>  * @since 2.5
>  *
>  * @param string $email User's email address
>  * @return bool|object False on failure, User DB row object
>  */
> function get_user_by_email($email) {
>         if(strlen($email) == 0 || empty($email) || $email == "" ||
> strpos($email, "@") == false)
>         {
>                 return false;
>         }
>         else
>         {
>                 return get_user_by('email', $email);
>         }
> }
> endif;
>
> Please consider changing this behavior in future versions. I hate having
> to modify core functions to keep a plugin working. :)

New description:

 Greetings,
 In versions previous to WP3, it was possible to pass wp_insert_user an
 array with or without an e-mail address and the user was created without
 issue.

 In WP3, a check was added to determine whether or not the user already
 exists by their e-mail address.
 {{{
 if ( !$update && ! defined( 'WP_IMPORTING' ) && email_exists($user_email)
 )
           return new WP_Error('existing_user_email', __('This email
 address is already registered.') );
 }}}

 The problem with this check is that it matches the admin account if you
 pass it a null or blank e-mail address.  The admin account, being created
 by the installation script, does not start with an e-mail address.

 This has caused one of my plugins (Simple LDAP Login) to fail. To fix
 this, I had to do this:
 {{{
 if ( !function_exists('get_user_by_email') ) :
 /**
  * Retrieve user info by email.
  *
  * @since 2.5
  *
  * @param string $email User's email address
  * @return bool|object False on failure, User DB row object
  */
 function get_user_by_email($email) {
         if(strlen($email) == 0 || empty($email) || $email == "" ||
 strpos($email, "@") == false)
         {
                 return false;
         }
         else
         {
                 return get_user_by('email', $email);
         }
 }
 endif;
 }}}

 Please consider changing this behavior in future versions. I hate having
 to modify core functions to keep a plugin working. :)

--

-- 
Ticket URL: <http://core.trac.wordpress.org/ticket/14834#comment:6>
WordPress Trac <http://core.trac.wordpress.org/>
WordPress blogging software


More information about the wp-trac mailing list