使用MEAN堆栈和Passport时,如何在用户注册时保存其他字段?

当用户在我的网站上注册时,我试图保存的不仅仅是电子邮件和密码。 所有护照示例仅显示电子邮件和密码正在存储。 如果我还有用户注册时需要存储的“性别”和“名称”字段怎么办? 我花了整整一天的时间,试图找出没有运气。 这是我目前使用的:

passport.js:

passport.use('local-signup', new LocalStrategy({ usernameField : 'email', passwordField : 'password', passReqToCallback : true }, function(req, email, password, done) { process.nextTick(function() { User.findOne({ 'email' : email }, function(err, user) { if (err) return done(err); if (user) { return done(null, false, req.flash('signupMessage', 'Email is already taken.')); } else { var newUser = new User(); newUser.email = email; newUser.password = newUser.generateHash(password); newUser.save(function(err) { if (err) throw err; return done(null, newUser); }); } }); }); })); 

routes.js:

 app.post('/signup', function(req, res, next) { passport.authenticate('local-signup', function(err, user, info) { if (err) { return next(err); } if (!user) { return res.redirect('/'); } req.logIn(user, function(err) { if (err) { return next(err); } // load up the user model var User = require('../app/models/user'); var conditions = { email: req.user.email } , update = { name: req.name, // works if I manually set "req.name" to "'Bill Smith'" gender: req.gender // works if I manually set "req.gender" to "'Male'" } , options = { multi: false }; User.update(conditions, update, options, callback); function callback (err, numAffected) { // numAffected is the number of updated documents } return res.json({ response: 1, username: req.user.email }); }); })(req, res, next); }); 

angular.js:

 $scope.signupMain = function () { var data = $.param({ name: $('#name').val(), email: $('#email').val(), password: $('#password').val(), gender: $('#gender').val() }); $http({ url: 'signup', method: "POST", data: data, headers: {'Content-Type': 'application/x-www-form-urlencoded'} }).success(function (result, status, headers, config) { // Do something }) .error(function (data, status, headers, config) { $scope.status = status; }); }; 

一切工作正常,如果我只是试图存储电子邮件和密码时,用户注册,但所有尝试保存“名称”和“性别”失败。 基本上,在routes.js我无法得到name: req.namegender: req.gender工作。 也就是说, req.namereq.gender不会“获取”这些值。 如果我手动inputname: 'Bill Smith'gender: 'Male'则该方法起作用。 我究竟做错了什么?

1.-将新属性添加到passport.js

 var newUser = new User(); newUser.email = email; newUser.password = newUser.generateHash(password); newUser.gender = req.body.gender; // Your new attribute (req.body = POST data) newUser.save(function(err) { if (err) throw err; return done(null, newUser); }); 

2.修改用户模型并将新属性添加到模式

使用req.body来获得你需要的字段。 但是,您将需要parsing它。 你可以使用bodyParser。

我在谷歌search时发现了这个问题,而请求人没有为我工作。 我不得不使用req.query。