Skip to content

Instantly share code, notes, and snippets.

@arekgotfryd
Created February 28, 2018 21:25
Show Gist options
  • Save arekgotfryd/46581f3aec2661465b2a447fb8a39e78 to your computer and use it in GitHub Desktop.
Save arekgotfryd/46581f3aec2661465b2a447fb8a39e78 to your computer and use it in GitHub Desktop.
var mongoose = require("mongoose");
var bcrypt = require("bcrypt");
var Schema = mongoose.Schema;
const SALT_WORK_FACTOR = 10;
var UserSchema = new Schema({
email: { type: String, required: true, index: { unique: true } },
password: { type: String, required: true }
});
UserSchema.pre("save", function(next) {
var user = this;
// only hash the password if it has been modified (or is new)
if (!user.isModified("password")) return next();
// generate a salt
bcrypt.genSalt(SALT_WORK_FACTOR, function(err, salt) {
if (err) return next(err);
// hash the password using our new salt
bcrypt.hash(user.password, salt, function(err, hash) {
if (err) return next(err);
// override the cleartext password with the hashed one
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.modle('User',UserSchema);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment