Skip to content

Instantly share code, notes, and snippets.

@FrancescaK
Created October 4, 2012 10:34
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save FrancescaK/3832833 to your computer and use it in GitHub Desktop.
Save FrancescaK/3832833 to your computer and use it in GitHub Desktop.
Password Testing Scenario
var mongoose = require(‘mongoose’),
Schema = mongoose.Schema,
bcrypt = require(‘bcrypt’),
SALT_WORK_FACTOR = 10;
var UserSchema = new Schema({
username: { 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.model(User, UserSchema);
@chrisabrams
Copy link

@ix-xerri
Copy link

It should be 'save' not save

@Zemke
Copy link

Zemke commented May 8, 2014

Thank you for the corrected version!

@hugmanrique
Copy link

Also, line 41 should be
module.exports = mongoose.model('User', UserSchema);

@arekgotfryd
Copy link

arekgotfryd commented Feb 28, 2018

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment