docs: function OAuthStrategy(options, verify) {
    if (typeof options == 'function') {
      verify = options;
      options = undefined;
    }
    options = options || {};
    
    if (!verify) { throw new TypeError('OAuthStrategy requires a verify callback'); }
    if (!options.requestTokenURL) { throw new TypeError('OAuthStrategy requires a requestTokenURL option'); }
    if (!options.accessTokenURL) { throw new TypeError('OAuthStrategy requires a accessTokenURL option'); }
    if (!options.userAuthorizationURL) { throw new TypeError('OAuthStrategy requires a userAuthorizationURL option'); }
    if (!options.consumerKey) { throw new TypeError('OAuthStrategy requires a consumerKey option'); }
    if (options.consumerSecret === undefined) { throw new TypeError('OAuthStrategy requires a consumerSecret option'); }
    
    passport.Strategy.call(this);
    this.name = 'oauth';
    this._verify = verify;
    
    // NOTE: The _oauth property is considered "protected".  Subclasses are
    //       allowed to use it when making protected resource requests to retrieve
    //       the user profile.
    this._oauth = new OAuth(options.requestTokenURL, options.accessTokenURL,
                            options.consumerKey,  options.consumerSecret,
                            '1.0', null, options.signatureMethod || 'HMAC-SHA1',
                            null, options.customHeaders);
    
    this._userAuthorizationURL = options.userAuthorizationURL;
    this._callbackURL = options.callbackURL;
    this._key = options.sessionKey || 'oauth';
    this._requestTokenStore = options.requestTokenStore || new SessionRequestTokenStore({ key: this._key });
    this._trustProxy = options.proxy;
    this._passReqToCallback = options.passReqToCallback;
    this._skipUserProfile = (options.skipUserProfile === undefined) ? false : options.skipUserProfile;
  }