更新bcrypted传递节点js和mongoose

时间:2014-07-31 16:48:33

标签: node.js mongodb express mongoose

基于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而没有运气。

2 个答案:

答案 0 :(得分:0)

根据您的用户架构,模型可能不知道您的密码已更改。我会尝试使用Mongoose的markModified方法(参见http://mongoosejs.com/docs/api.html#document_Document-markModified)。

答案 1 :(得分:0)

修正了,这只是这一行中的一个新手问题:

p._doc.local.password = newPass;

正确的是:

 user.local.password = newPass;