我使用Passport-Local Mongoose加密帐户的密码。但是我不知道怎么改密码。
你能给出一些文档或例子来做吗?谢谢。
发布于 2013-08-04 22:59:41
查看源代码,有一个名为setPassword的函数被添加到模式中。我相信在认证之后,你可以调用它来修改用户的密码。
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);
});
});
};发布于 2015-10-01 00:52:27
不需要身份验证。使用passport-local-mongoose,放置在模型上的findByUsername()方法从account检索用户,然后运行setPassword(),然后在回调中运行user.save()。
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字段。
发布于 2014-01-23 22:05:34
很好的答案,但对于那些来自MEAN堆栈的人(使用passport-local,而不是passport-local-mongoose):
//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;
});因此,这将改变过程:
user.password = '12345678';//and after this setter...
user.save(function(err){ //...save
if(err)...
});https://stackoverflow.com/questions/17828663
复制相似问题