2016-04-13 42 views
0

Merhaba yüzden benim passport.js aşağıdaki kod var: maalesefpassport.js içinde daha fazla parametre geçirilemez - ORTALAMA Stack

passport.use('local-signup', new LocalStrategy({ 
    // by default, local strategy uses username and password, we will override with email 
    usernameField : 'email', 
    passwordField : 'password', 
    nameField: 'fullname', 
    passReqToCallback : true // allows us to pass back the entire request to the callback 
}, 
function(req, email, password, done, fullname) { 

    // asynchronous 
    // User.findOne wont fire unless data is sent back 
    process.nextTick(function() { 

    // find a user whose email is the same as the forms email 
    // we are checking to see if the user trying to login already exists 
    User.findOne({ 'local.email' : email }, function(err, user) { 
     // if there are any errors, return the error 
     if (err) 
      return done(err); 

     // check to see if theres already a user with that email 
     if (user) { 
      return done(null, false, req.flash('signupMessage', 'That email is already taken.')); 
     } else { 

      // if there is no user with that email 
      // create the user 
      var newUser   = new User(); 

      // set the user's local credentials 
      newUser.local.email = email; 
      newUser.local.password = password; 
      newUser.local.fullname = fullname; 
      newUser.local.role = "default"; 

      // save the user 
      newUser.save(function(err) { 
       if (err) { 
        throw err; 
       } 
       console.log(newUser); 
       return done(null, newUser); 

      }); 
     } 

    });  

    }); 

})); 

Ve veritabanına tamadı kaydetmeniz gerekir ancak eklemez çünkü son parametredir, bittikten sonra. Ama hasta bitmeden önce isim koyduysa, yapılan geri dönüş bulunmaz ve bana bir uygulama çökmesi verir.

Çözüm olarak neler olabileceğini düşünüyorsunuz?

+0

Tam adı (nameField) "req" paramından alamıyor musunuz? – lipp

+0

Hayır, yapamam, sadece denedim. – NinetyHH

cevap

0

Tam adı req paramından alabilirsiniz. bodyparser kullanıyorsanız, req.body.fullname kadar basittir. İhtiyacınız olan yerde kullanın. E-posta ve şifreyle formu fullname gönderdiğinizden emin olmalısınız.

Pasaport için yerel strateji, usernameField ve passwordField'dan başka girişleri desteklemez. Kullanıcıdan başka girişlere ihtiyacınız varsa, bunları orijinal isteğinden almanız gerekir.