49 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			49 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
var mongoose = require('mongoose');
 | 
						|
var bcrypt = require('bcrypt-nodejs');
 | 
						|
 | 
						|
var userSchema = new mongoose.Schema({
 | 
						|
  email: { type: String, unique: true },
 | 
						|
  password: String,
 | 
						|
 | 
						|
  tokens: Array,
 | 
						|
  provider: String,
 | 
						|
  facebook: { type: String, unique: true, sparse: true },
 | 
						|
  twitter: { type: String, unique: true, sparse: true },
 | 
						|
  google: { type: String, unique: true, sparse: true },
 | 
						|
  github: { type: String, unique: true, sparse: true },
 | 
						|
 | 
						|
  profile: {
 | 
						|
    name: { type: String, default: '' },
 | 
						|
    gender: { type: String, default: '' },
 | 
						|
    location: { type: String, default: '' },
 | 
						|
    website: { type: String, default: '' },
 | 
						|
    picture: { type: String, default: '' }
 | 
						|
  }
 | 
						|
});
 | 
						|
 | 
						|
userSchema.pre('save', function(next) {
 | 
						|
  var user = this;
 | 
						|
  var SALT_FACTOR = 5;
 | 
						|
 | 
						|
  if (!user.isModified('password')) return next();
 | 
						|
 | 
						|
  bcrypt.genSalt(SALT_FACTOR, 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();
 | 
						|
    });
 | 
						|
  });
 | 
						|
});
 | 
						|
 | 
						|
userSchema.methods.comparePassword = function(candidatePassword, cb) {
 | 
						|
  bcrypt.compare(candidatePassword, this.password, function(err, isMatch) {
 | 
						|
    if(err) return cb(err);
 | 
						|
    cb(null, isMatch);
 | 
						|
  });
 | 
						|
};
 | 
						|
 | 
						|
module.exports = mongoose.model('User', userSchema);
 |