Tôi sử dụng Passport-Local Mongoose để mã hóa mật khẩu của tài khoản. Nhưng tôi không biết làm thế nào để thay đổi mật khẩu. Có ai biết cách làm không? TksHộ chiếu-Mongoose địa phương - Thay đổi mật khẩu?
15
A
Trả lời
19
Nhìn vào nguồn có một hàm được thêm vào lược đồ được gọi là setPassword. Tôi tin rằng sau khi xác thực bạn có thể gọi nó để thay đổi mật khẩu cho người dùng.
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);
});
});
};
6
câu trả lời tốt, nhưng đối với những người đến từ các MEAN ngăn xếp (sử dụng hộ chiếu cục bộ, không hộ chiếu cục bộ-cầy mangut):
//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;
});
Vì vậy, điều này sẽ thay đổi pass:
user.password = '12345678';//and after this setter...
user.save(function(err){ //...save
if(err)...
});
9
Không cần xác thực. Truy xuất người dùng từ tài khoản bằng cách sử dụng phương thức findByUsername()
, được đặt trên mô hình bằng hộ chiếu-local-mongoose, sau đó chạy setPassword()
, sau đó user.save()
trong gọi lại.
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);
})
tôi gọi người dùng sanitizedUser()
vì tôi đã cấu hình hộ chiếu cục bộ-cầy mangut để không trở về các lĩnh vực mật khẩu hoặc muối sử dụng findByUsername()
và các tùy chọn hộ chiếu trong mô hình.
Chỉ cần thử điều này và nó hoạt động! Điều này sẽ được đánh dấu là câu trả lời được chấp nhận. –
Chủ đề cũ, dù sao: thực sự, bạn không cần xác thực. Truy xuất người dùng từ tài khoản, setPassword, sau đó user.save trong gọi lại, và bạn đã hoàn tất. –
Xác thực theo nghĩa là email 'quên mật khẩu' hoặc một số phương tiện khác để đảm bảo người dùng là người mà họ khiếu nại – user1441287