2015-04-08 4 views
1
app.post('/signup', passport.authenticate('local-signup', { 
    successRedirect: '/', 
    failureRedirect: '/signup', 
    failureFlash: true 
})); 

Это маршрут.Успешно, но все еще используется failRedirect - паспорт

passport.use('local-signup', new LocalStrategy({ 
    usernameField: 'email', 
    passwordField: 'password', 
    passReqToCallback: true 
}, 
function(req, email, password, done) { 
    process.nextTick(function() { 
     User.findOne({ 'local.email': email }, function(err, user) { 
      if(err) 
       return done(err); 

      if(user) { 
       return done(null, false, req.flash('signupMessage', 'That email is already taken')); 
      } else { 
       var newUser = new User(); 

       newUser.local.email = email; 
       newUser.local.password = newUser.generateHash(password); 

       newUser.save(function(err) { 
        done(err, user); 
       }); 
      } 
     }); 
    }); 
})); 

Это файл конфигурации паспорта. Форма работает по назначению и сохраняется с помощью моей схемы монго, но вместо этого используется функция failRedirect вместо successRedirect, кто-нибудь замечает что-то неправильно?

ответ

1

Когда вы вызываете функцию сохранения для вновь созданного пользователя, вы забудьте передать второй аргумент в свой обратный вызов, который является документом пользователя, возвращаемым из db.

Из вашей текущей логики кода пользователь в последней выполненной функции ссылается на обратный вызов из findOne и поэтому никогда не будет там, так как если пользователь вернется с сервера в этот момент, он выполнит все в if (user) { ... }.

Убедитесь в том, чтобы передать второй аргумент, чтобы сохранить, как это:

newUser.save(function(err, user) { 
    done(err, user); 
}); 
+0

Как ярлык, вы можете использовать 'newUser.save (сделано)'. – robertklep

Смежные вопросы