gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 23:09:04 26 4
gpt4 key购买 nike

当用户在我的网站上注册时,我尝试保存的不仅仅是电子邮件和密码。所有 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 没有“获取”这些值。如果我手动输入诸如 name: '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.- 修改用户模型并将新属性添加到架构

关于angularjs - 使用 MEAN 堆栈和 Passport 时,如何在用户注册时保存其他字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22901323/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com