title: Can not create user after email validation
body: <p>I am using <a href="http://www.passportjs.org/" rel="nofollow noreferrer">passport.js</a> and <a href="https://www.npmjs.com/package/mailgun-validate-email" rel="nofollow noreferrer">mailgun-validate-email</a> to try and validate an email then create a user account based off that email. I can get it to validate the email but it will not finish the <code>POST</code> request to actually create the user. It will eventually show a post log but it does't even give a status code which I found weird. I am using <a href="https://github.com/expressjs/morgan" rel="nofollow noreferrer">morgan</a> to see this. </p>
  
  <p><strong>Passport.use signup middleware</strong></p>
  
  <pre><code>passport.use('signup', new LocalStrategy({
        usernameField: 'email',
        passReqToCallback : true
      },
      function(req, email, password, done) {
        var findOrCreateUser = function(){
          console.log(req.body.email);
          User.findOne({ email: req.body.email }, function(err, existingUser) {
            if(err){
              console.log(err);
            }
            if (existingUser) {
              req.flash('form', {
                email: req.body.email
              });
              return done(null, false, req.flash('error', 'An account with that email address already exists.'));
            }
            // edit this portion to accept other properties when creating a user.
            var user = new User({
              email: req.body.email,
              password: req.body.password // user schema pre save task hashes this password
            });
  
            user.save(function(err) {
              if (err) return done(err, false, req.flash('error', 'Error saving user.'));
  
              var token = new Token({ _userId: user._id, token: crypto.randomBytes(16).toString('hex') });
              token.save(function (err) {
              if (err) return done(null, false, req.flash('error', err.message));
              var email = req.body.email;
              // Send the email
              var message = 'Hello,\n\n' + 'Please verify your account by clicking the link: \nhttp:\/\/' + req.headers.host + '\/confirmation\/' + token.token + '\/' + email + '\n';
              sendEmail('"Phantom Asset Management" noreply@phantomam.com', user.email, 'Account Verification Token', message);
              });
              var time = 14 * 24 * 3600000;
              req.session.cookie.maxAge = time; //2 weeks
              req.session.cookie.expires = new Date(Date.now() + time);
              req.session.touch();
              return done(null, user, req.flash('success', 'A verification email has been sent to ' + user.email + '.'));
            });
            console.log('done');
          });
        };
  
        process.nextTick(findOrCreateUser);
  
      })
    );
  </code></pre>
  
  <p><strong>Then my controller</strong></p>
  
  <pre><code>exports.postSignup = function(req, res, next){
    req.assert('email', 'Please sign up with a valid email.').isEmail();
    req.assert('password', 'Password must be at least 6 characters long').len(6);
  
    var errors = req.validationErrors();
  
    if (errors) {
      req.flash('errors', errors);
      req.flash('form', {
        email: req.body.email
      });
      return res.redirect('/signup');
    }
    validator(req.body.email, function (err, result){
    if(err) {
      return console.log('Error: ', err); 
    } else {
      console.log('Result: ', result);
      if(result.is_valid == false){
        req.flash('error', 'Looks like your email is not valid did you mean ' + result.did_you_mean + '?');
          return res.redirect(req.redirect.failure);
      } else if(result.is_valid == true) {
        // calls next middleware to authenticate with passport
        passport.authenticate('signup', {
          successRedirect: '/dashboard', // Select redirect for post signup
          failureRedirect: '/signup',
          failureFlash : true
        });
      }
    }
  });
    (req, res, next);
      next();
  };
  </code></pre>
  
  <p>If my understanding of how I have it is correct it first checks to make sure it is an email then the password is the right length. If there is errors it lets the user know and redirect them back to <code>/signup</code>. Then it goes into the validator and either give an error to the console or goes into checking if it is valid or not. If it is not valid is shows the user an error but if valid goes into my passport middleware.</p>
  
  <p>Which should take and check if a user exists then flag error is need be. It saves the user and a token for that user to use to verify their email address. This all works fine expect the saving of the user and token. </p>
  
  <p>I think the problem has to do with the <code>user.save</code> area of the function but I am not too sure on that as I am lost on how to test other than <code>console.log</code> and seeing where I hit. I know I hit both above, in and below the <code>user.save</code></p>
  
  <p>Is there a glaring issue I am missing?</p>