2017-01-20 8 views
0

bookshelfjsでbcryptハッシュパスワードを使用していますが、パスワードを更新しようとするとパスワードをハッシングしません。データを更新するにはBookshelfjs + bcrypt hashPasswordは作成時には動作しますが、更新時には動作しません。

model.js

var Bookshelf = require('../../db').bookshelf; 
var bcrypt = require('bcrypt'); 
var Promise = require('bluebird'); 

// Provider model 
var User = Bookshelf.Model.extend({ 
    tableName: 'user_table', 
    initialize: function() { 
     this.on('creating', this.hashPassword, this); 
    }, 
    hashPassword: function(model, attrs, options) { 
     return new Promise(function(resolve, reject) { 
      bcrypt.hash(model.attributes.password, 10, function(err, hash) { 
       if(err) reject(err); 
       model.set('password', hash); 
       resolve(hash); // data is created only after this occurs 
      }); 
     }); 
    } 
}); 
var Users = Bookshelf.Collection.extend({ 
    model: User 
}); 

module.exports = { 
    User: User, 
    Users: Users 
}; 

service.js

var updateUser = function (object ,whereId, callback) { 
    Model.User.forge({id: whereId}) 
     .fetch({require: true}) 
     .then(function (user) { 
      user.save(object) 
       .then(function() { 
        console.log(user); 
        return callback(null, user); 
       }) 
       .catch(function (err) { 
        return callback(err, null); 
       }); 
     }) 
     .catch(function (err) { 
      return callback(err, null); 
     }); 
}; 

var createUser = function (reqObject, callback) { 
    Model.User.forge(reqObject) 
     .save() 
     .then(function (user) { 
      return callback(null, user); 
     }) 
     .catch(function (err) { 
      return callback(err, null); 
     }); 
}; 

は次のとおりです。

var dataToBeUpdated = { 
          password : req.body.password 
         }; 

答えて

1

行いますモデルで '保存' で '作成' に置き換え仕事

var User = Bookshelf.Model.extend({ 
    tableName: 'user_table', 
    initialize: function() { 
     this.on('saving', this.hashPassword, this); 
    }, 
    hashPassword: function(model, attrs, options) { 
     return new Promise(function(resolve, reject) { 
      bcrypt.hash(model.attributes.password, 10, function(err, hash) { 
       if(err) reject(err); 
       model.set('password', hash); 
       resolve(hash); // data is created only after this occurs 
      }); 
     }); 
    } 
}); 

出典:http://wesleytsai.io/2015/07/28/bookshelf-bcrpyt-password-hashing/

関連する問題