我正在尝试用mongoose更新用户文档,但我无法完成它。这是我的用户模型
var UserSchema = new Schema({
email : {
type : String,
unique : true
},
salt : {
type : String,
required : true
},
hash : {
type : String,
required : true
},
account_no : {
type : String,
required : true,
unique : true
},
activate_until:{
date:{ type: Date, default: Date.now }
},
valid : {
type : Boolean,
required : false
},
reset_token:{
type : String
},
reset_until:{
date:{ type: Date, default: Date.now }
}
});
UserSchema.virtual('password').get(function() {
return this._password;
}).set(function(password) {
this._password = password;
var salt = this.salt = bcrypt.genSaltSync(10);
this.hash = bcrypt.hashSync(password, salt);
this.account_no = generateAccountNo();
this.activate_until=new Date();
this.valid = false;
});
现在我正在尝试使用以下方法更新用户密码
resetAccount: function(key,password, callback) {
User.findOne({
reset_token : key
}, function(err, user) {
if(err) {
console.error(err);
return callback(err);
}
if(!user) {
console.log("not user");
return callback("not user", false);
}
var salt = user.salt = bcrypt.genSaltSync(10);
user.hash = bcrypt.hashSync(password, salt);
console.log(user);
var upsertData = user.toObject();
// Delete the _id property, otherwise Mongo will return a "Mod on _id not allowed" error
delete upsertData._id;
console.log( user._id);
// Do the upsert, which works like this: If no Contact document exists with
// _id = contact.id, then create a new doc using upsertData.
// Otherwise, update the existing doc with upsertData
User.update({
_id : user._id
},{$set:{ salt:salt,hash:user.hash}}, {
upsert : false
}, function(err) {
if(err) {
console.error(err);
callback(err);
}
return callback("Password changed", user);
});
// this.update({account_no:key}, { $set: { valid: false }},{ upsert: true }, //function(err, user) {
// if (err) { console.log(err);return callback(err); }
// if (!user) { return callback(null, false); }
// console.log(this.email);
// return callback(user,true);
//
// });
});
},
我错过了什么让它无法正常工作?
谢谢, Feras