code: function Strategy(options, verify) {
    if (typeof options == 'function') {
      verify = options;
      options = {};
    }
  
    if (!verify) { throw new TypeError('KeystoneStrategy requires a verify callback'); }
  
    this._usernameField = options.usernameField || 'username';
    this._passwordField = options.passwordField || 'password';
    this._region = options.region || '';
    this._authUrl = options.authUrl || '';
    this._tenantId = options.tenantId || '';
  
    passport.Strategy.call(this);
    this.name = 'keystone';
    this._verify = verify;
    this._passReqToCallback = options.passReqToCallback;
  }
docs: `Strategy` constructor.
  
  The Keystone authentication strategy authenticates requests against an Identity endpoint
  based on the credentials submitted through a POST request
  
  Applications must supply a `verify` callback which accepts the identity object, and then calls the `done` callback supplying a
  `user`, which should be set to `false` if the credentials are not valid.
  If an exception occured, `err` should be set.
  
  Optionally, `options` can be used to change the fields in which the
  credentials are found.
  
  Options:
  - `usernameField`  field name where the username is found, defaults to _username_
  - `passwordField`  field name where the password is found, defaults to _password_
  - 'region'         sets region
  - 'authUrl'        sets auth url
  - `passReqToCallback`  when `true`, `req` is the first argument to the verify callback (default: `false`)
  
  Examples:
  
  passport.use(new KeystoneStrategy({
  region: "ord",
  authUrl: "https://yoursite.com",
  passReqToCallback: true
  },
  function(req, identity, done) {
  User.findOne({ id: identity.user.name }, function (err, user) {
  done(err, user);
  });
  }
  ));
  
  @param {Object} options
  @param {Function} verify
  @api public