Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 'use strict';
- const mongoose = require('mongoose');
- const Schema = mongoose.Schema;
- const isEmail = require('validator').isEmail;
- const Promise = require('bluebird');
- const bcrypt = require('bcrypt');
- // define the User model
- const userSchema = new Schema({
- fullName: {
- type: String,
- required: 'Full Name is required',
- trim: true
- },
- emailAddress: {
- type: String,
- unique: 'Email Address is already on file and not available',
- lowercase: true,
- trim: true,
- validate: {validator: isEmail, message: '{VALUE} Is an invalid Email Address', isAsync: false},
- required: 'Email Address is required'
- },
- password: {
- type: String,
- required: 'Password is required',
- }
- });
- // authenticate User
- userSchema.statics.authenticate = function(email, password, callback) {
- // search for user by email
- User.findOne({ emailAddress: email })
- .exec((err, user) => {
- if (err) {
- return callback(err);
- } else if (!user) {
- err = new Error('User Not Found');
- err.status = 401;
- return callback(err);
- }
- // validate password hashing with bcrypt
- bcrypt.compare(password, user.password, function (err, result) {
- if (result === true){
- return callback(null, user)
- } else{
- return callback();
- }
- });
- });
- };
- // hash password prior to saving to database
- userSchema.pre('save', function(next) {
- const user = this;
- const saltRounds = 10;
- bcrypt.hash(user.password, saltRounds)
- .then(function(hash){ return user.password = hash; })
- .catch(function(err){
- return next(err);
- });
- });
- module.exports = mongoose.model('User', userSchema);
Add Comment
Please, Sign In to add comment