You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

71 lines
1.7 KiB
JavaScript

var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var bcrypt = require('bcrypt-nodejs');
var UserSchema = new Schema({
name: String,
userid: String,
updated_at: { type: Date, default: Date.now },
username: {
type: String,
unique: true,
required: true
},
password: {
type: String,
required: false
},
social: {
type: Boolean,
required: false
}
});
// UserSchema.statics.findOrCreate = function findOneOrCreate(condition, callback) {
// console.log(JSON.stringify(condition));
// const self = this;
// self.findOne(condition, (err, result) => {
// return result ? callback(err, result) : self.create(condition, (err, result) => {
// return callback(err, result)
// })
// })
// };
UserSchema.statics.findOneOrCreate = function(displayName, cb){
console.log('findOneOrCreate'+displayName);
return (displayName ? this.find({name: displayName}, cb) : this.findOne({}, cb)).then(page => page ? page : this.create({}, cb))
};
UserSchema.pre('save', function (next) {
var user = this;
if (this.isModified('password') || this.isNew) {
bcrypt.genSalt(10, function (err, salt) {
if (err) {
return next(err);
}
bcrypt.hash(user.password, salt, null, function (err, hash) {
if (err) {
return next(err);
}
user.password = hash;
next();
});
});
} else {
return next();
}
});
UserSchema.methods.comparePassword = function (passw, cb) {
bcrypt.compare(passw, this.password, function (err, isMatch) {
if (err) {
return cb(err);
}
cb(null, isMatch);
});
};
module.exports = mongoose.model('User', UserSchema);