2017-06-21 2 views
1

Mon modèle utilisateur estBookshelf.js est en train de changer le mot de passe à chaque mise à jour des données en utilisant 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 
      }); 
     }); 
    } 
}); 

Lors de la création à l'utilisateur le mot de passe est défini sur

$2a$10$QD6FmChgGZEMooCklLfemOvAaHHV2RfUMQ5EoNwuMeojb6y2Hh2iK 

et fonctionne parfaitement sur la connexion,

Lorsqu'une mise à jour est faite au champ utilisateur, il provoque le mot de passe à chaque fois que le changement de valeur aléatoire

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

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

Sur une note de côté - vous devriez vérifier async/await dans nodejs 8.0. Plutôt que d'utiliser Promise de la façon dont vous utilisez async/await, c'est une syntaxe plus concise qui rend le code plus facile à lire. Quelques liens : [lien ici] (https://hackernoon.com/6-reasons-why-javascripts-async-await-blows-promises-away-tutorial-c7ec10518dd9) [lien Promisifying-core-bibliothèques ] (https://medium.com/front-end-hacking/promises-in-node-js-8-x-core-d6a8a93e85a2) – j10

Répondre

0

Puisque vous utilisez bookshelfjs. Vous pouvez utiliser Bookshelf-bycrypt plugin Il prend soin de hacher le mot de passe. Lors de la mise à jour de la ligne du tableau, mentionnez explicitement la mise à jour comme suit:

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

ne pas {patch: true} implique une mise à jour. Je veux dire que nous ne pouvons pas ignorer la partie {method: "update"}? – j10