首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Passport-本地Mongoose -更改密码?

问Passport-本地Mongoose -更改密码?
EN

Stack Overflow用户
提问于 2013-07-24 16:21:21
回答 7查看 21.1K关注 0票数 20

我使用Passport-Local Mongoose加密帐户的密码。但是我不知道怎么改密码。

你能给出一些文档或例子来做吗?谢谢。

EN

回答 7

Stack Overflow用户

发布于 2013-08-04 22:59:41

查看源代码,有一个名为setPassword的函数被添加到模式中。我相信在认证之后,你可以调用它来修改用户的密码。

代码语言:javascript
复制
schema.methods.setPassword = function (password, cb) {
    if (!password) {
        return cb(new BadRequestError(options.missingPasswordError));
    }

    var self = this;

    crypto.randomBytes(options.saltlen, function(err, buf) {
        if (err) {
            return cb(err);
        }

        var salt = buf.toString('hex');

        crypto.pbkdf2(password, salt, options.iterations, options.keylen, function(err, hashRaw) {
            if (err) {
                return cb(err);
            }

            self.set(options.hashField, new Buffer(hashRaw, 'binary').toString('hex'));
            self.set(options.saltField, salt);

            cb(null, self);
        });
    });
};
票数 21
EN

Stack Overflow用户

发布于 2015-10-01 00:52:27

不需要身份验证。使用passport-local-mongoose,放置在模型上的findByUsername()方法从account检索用户,然后运行setPassword(),然后在回调中运行user.save()。

代码语言:javascript
复制
userModel.findByUsername(email).then(function(sanitizedUser){
    if (sanitizedUser){
        sanitizedUser.setPassword(newPasswordString, function(){
            sanitizedUser.save();
            res.status(200).json({message: 'password reset successful'});
        });
    } else {
        res.status(500).json({message: 'This user does not exist'});
    }
},function(err){
    console.error(err);
})

我之所以称用户为sanitizedUser(),是因为我使用模型中的findByUsername()和passport选项将password配置为不返回password或salt字段。

票数 16
EN

Stack Overflow用户

发布于 2014-01-23 22:05:34

很好的答案,但对于那些来自MEAN堆栈的人(使用passport-local,而不是passport-local-mongoose):

代码语言:javascript
复制
//in app/models/user.js

/**
 * Virtuals
 */
UserSchema.virtual('password').set(function(password) {
    this._password = password;
    this.salt = this.makeSalt();
    this.hashed_password = this.encryptPassword(password);
}).get(function() {
    return this._password;
});

因此,这将改变过程:

代码语言:javascript
复制
user.password = '12345678';//and after this setter...
user.save(function(err){ //...save
    if(err)...
});
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17828663

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档