code: function Strategy(options, verify) {
    options = options || {};
    passport.Strategy.call(this);
    this.name = 'openidconnect';
    this._verify = verify;
    
    // TODO: What's the recommended field name for OpenID Connect?
    this._identifierField = options.identifierField || 'openid_identifier';
    this._scope = options.scope;
    this._passReqToCallback = options.passReqToCallback;
    this._skipUserProfile = (options.skipUserProfile === undefined) ? false : options.skipUserProfile;
    
    this._setup = undefined;
  
    this._key = options.sessionKey || (this.name + ':' + url.parse(options.authorizationURL).hostname);
    this._stateStore = options.store || new SessionStateStore({ key: this._key });
  
    if (options.authorizationURL && options.tokenURL) {
      // This OpenID Connect strategy is configured to work with a specific
      // provider.  Override the discovery process with pre-configured endpoints.
      this.configure(require('./setup/manual')(options));
      //this.configure(require('./setup/dynamic')(options));
    } else {
      this.configure(require('./setup/dynamic')(options));
    }
  }
docs: `Strategy` constructor.
  
  The OpenID Connect authentication strategy authenticates requests using
  OpenID Connect, which is an identity layer on top of the OAuth 2.0 protocol.
  
  @param {Object} options
  @param {Function} verify
  @api public