基于http://scotch.io/tutorials/javascript/easy-node-authentication-setup-and-local示例,我开始创建一个测试应用 我有这个代码来更新密码:
app.post('/admin/account', isLoggedIn, function(req, res, next) {
var oldPass = req.body.oldPass;
var newPass = req.body.newPass;
req.flash('info', 'OK');
req.flash('error', 'Old password incorrect');
if (req.user.validPassword(oldPass)) {
newPass = req.user.generateHash(newPass);
User.findById(req.session.passport.user, function(err, p){
if (!p)
return next(new Error('Could not load Document'));
else {
p._doc.local.password = newPass;
p.save(function(err) {
if (err)
console.log('error')
else
console.log('success')
});
}
});
res.render('admin/account.ejs', {
menu : 'account',
messageInfo: req.flash('info'),
messageError: false
});
} else {
res.render('admin/account.ejs', {
menu : 'account',
messageError: req.flash('error'),
messageInfo: false
});
}
});
除了不能更新数据库中的密码外,一切似乎都运行正常。
我的意思是req.session.passport.user
返回正确的userId(我在集合中有更多用户),req.session.passport.user
返回正确的加密传递,newPass是正确的新加密传递,最后是控制台打印{{1}但是我不知道会出现什么问题。我还尝试使用success
代替findOne
而没有运气。
答案 0 :(得分:0)
根据您的用户架构,模型可能不知道您的密码已更改。我会尝试使用Mongoose的markModified
方法(参见http://mongoosejs.com/docs/api.html#document_Document-markModified)。
答案 1 :(得分:0)
修正了,这只是这一行中的一个新手问题:
p._doc.local.password = newPass;
正确的是:
user.local.password = newPass;