login_token_manager = $login_token_manager; } /** * @return WP_User * * @throws User_Not_Found_Exception */ public function create(): WP_User { $step_token_hash = $this->login_token_manager->get_token_hash(); if ( empty( $step_token_hash ) ) { throw new User_Not_Found_Exception(); } $wp_user = $this->find_wp_user( $step_token_hash ); if ( is_null( $wp_user ) ) { throw new User_Not_Found_Exception(); } return $wp_user; } /** * @param string $step_token_hash * * @return null|WP_User */ private function find_wp_user( string $step_token_hash ) { $users = get_users( [ 'blog_id' => 0, //search in all blogs 'meta_key' => User_Storage::STEP_TOKEN, 'meta_value' => $step_token_hash, 'meta_compare' => 'LIKE' ] ); if ( empty( $users ) ) { return null; } if ( count( $users ) > 1 ) { throw new LogicException( 'Found more than one user' ); } return $users[0]; } }