Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/429.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Bookshelf.js正在使用bcrypt更改每次数据更新时的密码_Javascript_Node.js_Express_Bcrypt_Bookshelf.js - Fatal编程技术网

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的语法更简洁,代码更易于阅读。一些链接: