Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using BCrypt with Sequelize Model

Tags:

I'm trying to use the bcrypt-nodejs package with my sequelize model and was tring to follow a tutorial to incorporate the hashing into my model, but I'm getting an error at generateHash. I can't seem to figure out the issue. Is there a better way to incorporate bcrypt?

Error:

/Users/user/Desktop/Projects/node/app/app/models/user.js:26 User.methods.generateHash = function(password) {                           ^ TypeError: Cannot set property 'generateHash' of undefined     at module.exports (/Users/user/Desktop/Projects/node/app/app/models/user.js:26:27)     at Sequelize.import (/Users/user/Desktop/Projects/node/app/node_modules/sequelize/lib/sequelize.js:641:30) 

model:

var bcrypt = require("bcrypt-nodejs");  module.exports = function(sequelize, DataTypes) {  var User = sequelize.define('users', {     annotation_id: {         type: DataTypes.INTEGER,         autoIncrement: true,         primaryKey: true     },     firstName: {         type: DataTypes.DATE,         field: 'first_name'     },     lastName: {         type: DataTypes.DATE,         field: 'last_name'     },     email: DataTypes.STRING,     password: DataTypes.STRING,  }, {     freezeTableName: true });  User.methods.generateHash = function(password) {     return bcrypt.hashSync(password, bcrypt.genSaltSync(8), null); };  User.methods.validPassword = function(password) {     return bcrypt.compareSync(password, this.local.password); };     return User; } 
like image 359
cphill Avatar asked Dec 06 '15 17:12

cphill


1 Answers

Methods should be provided in the "options" argument of sequelize.define

const bcrypt = require("bcrypt");  module.exports = function(sequelize, DataTypes) {     const User = sequelize.define('users', {         annotation_id: {             type: DataTypes.INTEGER,             autoIncrement: true,             primaryKey: true         },         firstName: {             type: DataTypes.DATE,             field: 'first_name'         },         lastName: {             type: DataTypes.DATE,             field: 'last_name'         },         email: DataTypes.STRING,         password: DataTypes.STRING     }, {         freezeTableName: true,         instanceMethods: {             generateHash(password) {                 return bcrypt.hash(password, bcrypt.genSaltSync(8));             },             validPassword(password) {                 return bcrypt.compare(password, this.password);             }         }     });      return User; } 
like image 120
Louay Alakkad Avatar answered Oct 18 '22 11:10

Louay Alakkad