You can find a complete sample of what you are trying to do in Alex Young's Nodepad app. The 2 important files you should pay attention to are the following 2:
https://github.com/alexyoung/nodepad/blob/master/models.js
https://github.com/alexyoung/nodepad/blob/master/app.js
Part of the model is as follows:
User = new Schema({ 'email': { type: String, validate: [validatePresenceOf, 'an email is required'], index: { unique: true } }, 'hashed_password': String, 'salt': String }); User.virtual('id') .get(function() { return this._id.toHexString(); }); User.virtual('password') .set(function(password) { this._password = password; this.salt = this.makeSalt(); this.hashed_password = this.encryptPassword(password); }) .get(function() { return this._password; }); User.method('authenticate', function(plainText) { return this.encryptPassword(plainText) === this.hashed_password; }); User.method('makeSalt', function() { return Math.round((new Date().valueOf() * Math.random())) + ''; }); User.method('encryptPassword', function(password) { return crypto.createHmac('sha1', this.salt).update(password).digest('hex'); }); User.pre('save', function(next) { if (!validatePresenceOf(this.password)) { next(new Error('Invalid password')); } else { next(); } });
I think he also explains the code on dailyjs website .
alessioalex Nov 13 '11 at 12:53 2011-11-13 12:53
source share