2017-12-09 3 views
0

Ich bin ein Anfänger zu NodeJs und versuchen, Benutzerdetails zu mlab speichern, aber nicht Hash Passwort speichern. Der Hash wird berechnet und erscheint in console.log, aber im mlab-Dokument wird der Klartext anstelle von Hash gespeichert.nicht Hash mit bcrypt zu mlab speichern, aber auf Konsole Hash angezeigt

var express = require('express'); 
var router = express.Router(); 
var mongojs = require('mongojs'); 
var bcrypt = require('bcrypt'); 

var db = mongojs('mongodb://admin:[email protected]:33776/project', 
['users']); 

router.get('/',function(req,res,next){ 
res.render('register.html'); 
}); 

router.post('/reguser',function(req,res,next){ 
var user = req.body; 
db.users.findOne({uemail: user.uemail},function(err,xuser){ 
    if(xuser){ 
     res.send('User already exists'+JSON.stringify(user)); 
    } 
    else{ 
     bcrypt.hash(user.upassword,8,function(err,hash){ 
      user.upassword = hash; 
      console.log('hash is '+user.upassword); 
     }); 
     db.users.save(user, function(err,user){ 
      if(err){ 
       res.send(err); 
      } else { 
       console.log('Saved-- '+JSON.stringify(user)); 
       res.json(user); 
      } 
     }); 
     } 
    }); 
}); 

Antwort

1

Es ist, weil die Hash-Funktion asynchronous ist. Die Ausführung des Codes folgt keiner geraden Linie. Die Sicherungsfunktion wird ausgeführt, bevor der Hash in diesem speziellen Fall erstellt wird. Wenn Sie das Speichern im Hash-Callback verschachteln, erstellen Sie zuerst den Hash und führen dann das Speichern durch.

So:

bcrypt.hash(user.upassword,8,function(err,hash){ 
    user.upassword = hash; 
    console.log('hash is '+user.upassword); 

    db.users.save(user, function(err,user){ 
     if(err){ 
      res.send(err); 
     } else { 
      console.log('Saved-- '+JSON.stringify(user)); 
      res.json(user); 
     } 
    }); 
}); 
+0

Vielen Dank, arbeitete Ihre Lösung erfolgreich –

Verwandte Themen