docs: function GoogleOAuth2Strategy(options, verify) {
          var self = this;
  
          if (typeof options === 'function') {
              verify = options;
              options = {};
          }
          if (!verify) {
              throw new Error('GoogleOAuth2Strategy requires a verify callback');
          }
  
          requiredArgs.forEach(function (arg) {
              if (!options[arg.name]) {
                  throw new Error(util.format('GoogleOAuth2Strategy requires a [%s]', arg.name));
              } else if (typeof options[arg.name] !== arg.type) {
                  throw new Error(util.format('GoogleOAuth2Strategy expects [%s] to be a [%s] but it was a [%s]', arg.name, arg.type, typeof options[arg.name]));
              }
              // If we've passed the checks, go ahead and set it in the current object.
              self[arg.name] = options[arg.name];
          });
  
          optionalArgs.forEach(function (arg) {
              if (options[arg.name] && typeof options[arg.name] !== arg.type) {
                  throw new Error(util.format('GoogleOAuth2Strategy expects [%s] to be a [%s] but it was a [%s]', arg.name, arg.type, typeof options[arg.name]));
              }
              // If we've passed the checks, go ahead and set it in the current object.
              self[arg.name] = options[arg.name];
          });
  
          if (options.scope && (typeof options.scope !== 'string' && !Array.isArray(options.scope))) {
              throw new Error(util.format('GoogleOAuth2Strategy expects [%s] to be a [%s] but it was a [%s]', 'scope', 'array or string', typeof options.scope));
          }
  
          self.scope = options.scope || 'https://www.googleapis.com/auth/userinfo.email';
  
          passport.Strategy.call(self);
          self.name = 'google';
          self.verify = verify;
  
          if (!self.skipUserProfile) {
              self.googlePlus = gapi.plus('v1');
          }
      }