Javascript Bookshelf.js正在使用bcrypt更改每次数据更新时的密码
我的用户模型是Javascript Bookshelf.js正在使用bcrypt更改每次数据更新时的密码,javascript,node.js,express,bcrypt,bookshelf.js,Javascript,Node.js,Express,Bcrypt,Bookshelf.js,我的用户模型是 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', i
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
因为您使用的是书架FJS。你可以利用 它负责对密码进行哈希运算。更新表行时,请按如下所示显式提及更新
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) {
// ...
});
不{patch:true}表示更新。我的意思是,我们不能跳过{method:“update”}部分吗?另一方面,您应该在nodejs8.0中签出async/wait。与使用async/await的方式相比,使用Promise的语法更简洁,代码更易于阅读。一些链接: