2016-03-03 68 views
1

添加参数我使用的护照本地认证与本教程: https://scotch.io/tutorials/easy-node-authentication-setup-and-local护照不能为本地认证

它工作的很好,但我wan't一些参数添加到我的用户喜欢他的冷杉名字和姓氏在我的mongoldb数据库中。我想不通我怎么可以用这个功能做的,因为它是一个回调和done

passport.use('local-signup', new LocalStrategy({ 
       // by default, local strategy uses username and password, we will override with email 
       usernameField : 'email', 
       passwordField : 'password', 
       lastnameField : 'lastname', // here I added this field 
       firstnameField : 'first name', // here I added this field 
      }, 
      function(req, email, password, done) { 

       // 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 = newUser.generateHash(password); 
// here I want to save my field : 
          newUser.local.lastname = lastname; 
          newUser.local.firstname = firstname; 

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

        }); 

       }); 
      })); 

后,我无法通过索姆参数你能帮助我吗?

回答

3

这是非常容易的,请尝试使用req.body.yourvariable,这里是你的代码: 并添加passReqToCallback : true to the parameters.

passport.use('local-signup', new LocalStrategy({ 
      // by default, local strategy uses username and password, we will override with email 
      usernameField : 'email', 
      passwordField : 'password', 
      passReqToCallback : true // allows us to pass back the entire request to the callback 
     }, 
     function(req, email, password, done) { 
      // 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 = newUser.generateHash(password); 
         newUser.local.lastname = req.body.lastname; 
         newUser.local.firstname = req.body.firstname; 

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

       }); 

      }); 
     }));