code: function Strategy(options, verify) {
    if (!verify) throw new TypeError('PersonaStrategy requires a verify callback');
    if (!options.audience) throw new TypeError('PersonaStrategy requires an audience option');
    
    passport.Strategy.call(this);
    this.name = 'persona';
    this._verify = verify;
    this._passReqToCallback = options.passReqToCallback;
    
    this._audience = options.audience;
    this._assertionField = options.assertionField || 'assertion';
    
    // options used to inject mock objects for testing purposes
    this._https = options.transport || https;
  }
docs: `Strategy` constructor.
  
  The Persona authentication strategy authenticates requests using the
  navigator.id JavaScript API and BrowserID, by using Mozilla's Remote
  Verification API.
  
  BrowserID provides a federated and decentralized universal login system for
  the web, based on email addresses as an identity token.  Authenticating in
  this this manner involves a sequence of events, including prompting the user,
  via their user agent, for an assertion of email address ownership.  Once this
  assertion is obtained, it can be verified and the user can be authenticated.
  
  Applications must supply a `verify` callback which accepts an `email`
  address, 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.
  
  Options:
  - `audience`        the website requesting and verifying an identity assertion
  - `assertionField`  field name where the assertion is found, defaults to 'assertion'
  - `passReqToCallback`     when `true`, `req` is the first argument to the verify callback (default: `false`)
  
  Examples:
  
  passport.use(new PersonaStrategy({
  audience: 'http://www.example.com'
  },
  function(email, done) {
  User.findByEmail(email, function (err, user) {
  done(err, user);
  });
  }
  ));
  
  @param {Object} options
  @param {Function} verify
  @api public