Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js NodeJS,Passport:如何更改用户';管理员输入的密码_Node.js_Mongodb_Authentication_Passport.js - Fatal编程技术网

Node.js NodeJS,Passport:如何更改用户';管理员输入的密码

Node.js NodeJS,Passport:如何更改用户';管理员输入的密码,node.js,mongodb,authentication,passport.js,Node.js,Mongodb,Authentication,Passport.js,我开始为修改用户创建管理面板。我想有能力改变管理员用户密码。我使用passport进行身份验证。我更改了用户的密码-数据正在保存到mongo,但在此之后,用户无法登录到该站点。 请帮忙 我的Passport配置: module.exports = function(passport) { passport.serializeUser(function(user, done) { done(null, user.id) }); passport.dese

我开始为修改用户创建管理面板。我想有能力改变管理员用户密码。我使用passport进行身份验证。我更改了用户的密码-数据正在保存到mongo,但在此之后,用户无法登录到该站点。 请帮忙

我的Passport配置:

module.exports = function(passport) {

    passport.serializeUser(function(user, done) {
        done(null, user.id)
    });

    passport.deserializeUser(function(id, done) {
        User.findById(id, function(err, user) {
            done(err, user);
        });
    });

    passport.use('local-login', new LocalStrategy({

            usernameField : 'email',
            passwordField : 'password_first',
            passReqToCallback : true 
        },

        function(req, email, password, done) {

            User.findOne({ 'email' :  email }, function(err, user) {

                if (err)
                    return done(err);

                if (!user)
                    return done(null, false, function(req, res){
                        res.send({error: true})
                    });

                if (!user.isAuthenticated )

                    return done(null, false, function(req, res){
                        res.send({error: true})
                    });

                if (!user.validPassword(password))
                    return done(null, false, function(req, res){
                        res.send({error: true})
                    });

                if(user){
                    return done(null, user);
                }
            });

        }));
用户模型:

var userSchema = mongoose.Schema({

    date                : Date,
    role                : String,
    newRole             : { type: mongoose.Schema.Types.ObjectId, ref: 'newRole'},
    authToken           : { type: String, required : true, unique:true },
    isAuthenticated     : { type: Boolean, required : true },
    username            : String,
    email               : String,
    password_first      : String,
    firstName           : String,
    lastName            : String,
    address             : String,
    phone               : String,
    resetPasswordToken  : String,
    resetPasswordExpires: Date });

Methods:

userSchema.methods.generateHash = function(password) {
    return bcrypt.hashSync(password, bcrypt.genSaltSync(8), null);
};

userSchema.methods.validPassword = function(password) {
    return bcrypt.compareSync(password, this.password_first);
};

var User = mongoose.model('User', userSchema);

module.exports = User;
最后:

exports.changeByAdmin = function (req, res, next) {

   User.findById({ _id : req.params.id }, function(err, updateUser) {

        if(err) return next(err);
        if (!updateUser) return next();

        updateUser.email = req.body.email;

        updateUser.firstName = req.body.firstName;

        updateUser.lastName = req.body.lastName;

        updateUser.address = req.body.address;

        updateUser.phone = req.body.phone;

        updateUser.password_first = updateUser.generateHash(req.body.password_first);

        updateUser.save(function(err, updateUser) {
            if(err) return next(err);
            if(!updateUser) return next();
                res.send({ success: true });
        });
    });
};

如果我只更改用户的电子邮件,用户可以使用新电子邮件和旧密码登录,但如果我更改密码-用户无法登录。请告诉我这个问题的解决办法。谢谢。

这是您的完整用户模型吗?是否有一个预保存钩子在某个地方再次散列密码?@Kryten正在
changeByAdmin
中(手动)执行此操作。它到底在哪里失败?当用户尝试登录时,
validPassword
是否失败?数据库中的用户文档是否已正确更新?在保存之前,
updateUser.password\u是否有意义?等等,@robertklep在
updateUser.save()
之后,数据库中的用户文档被更新,数据库中的第一个密码正在更改,但我尝试登录,
validPassword()
失败。我认为问题出在passport中,可能是我只能为会话中的用户更改密码?请尝试查看是否可以根据独立代码中的新密码验证生成的哈希。这是您的完整用户模型吗?是否有一个预保存钩子在某个地方再次散列密码?@Kryten正在
changeByAdmin
中(手动)执行此操作。它到底在哪里失败?当用户尝试登录时,
validPassword
是否失败?数据库中的用户文档是否已正确更新?在保存之前,
updateUser.password\u是否有意义?等等,@robertklep在
updateUser.save()
之后,数据库中的用户文档被更新,数据库中的第一个密码正在更改,但我尝试登录,
validPassword()
失败。我认为问题出在passport中,可能是我只能为会话中的用户更改密码?请尝试查看是否可以根据独立代码中的新密码验证生成的哈希。