2017-06-21 39 views
1

我的用戶模型是Bookshelf.js使用bcrypt

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

// User model 
var User_Model = Bookshelf.Model.extend({ 
    tableName: 'users', 
    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 
      }); 
     }); 
    } 
}); 

在創建密碼設置爲

$2a$10$QD6FmChgGZEMooCklLfemOvAaHHV2RfUMQ5EoNwuMeojb6y2Hh2iK 

用戶,並在登錄完美的工作每次更新更改密碼數據,

當對用戶字段進行任何更新時,會導致每次更改密碼爲隨機值

$2a$10$IVW.2JN/TPVABsx73t870uwKMNsDKoGmLJzOs1y/MPMOe.WRMBL4W 

$2a$10$12sjEqM3t345dcq7rDixgu.9TZiWOC.JN5Ke8SI2F0IXv/YpdRwTK 
+0

在旁註 - 你應該在nodejs 8.0中檢出async/await。而不是以您使用async/await的方式使用Promise是更簡潔的語法,並使代碼易於閱讀。 一些鏈接: [點擊這裏](https://hackernoon.com/6-reasons-why-javascripts-async-await-blows-promises-away-tutorial-c7ec10518dd9) [鏈接Promisifying核心函數庫](https://medium.com/front-end-hacking/promises-in-node-js-8-x-core-d6a8a93e85a2) – j10

回答

0

由於您正在使用bookshelfjs。你可以使用Bookshelf-bycrypt plugin 它負責散列密碼。當更新表格行更新明確如下

model.save([key], [val], [attrs], [options]) 


// update authors set "bio" = 'Short user bio' where "id" = 1 
new Author({id: 1, first_name: 'User'}) 
    .save({bio: 'Short user bio'}, {method: "update" }{patch: true},) 
    .then(function(model) { 
    // ... 
    }); 
+0

不{{patch:true}暗示更新。我的意思是我們不能跳過{method:「update」}部分嗎? – j10