2017-12-09 11 views
0

저는 NodeJs의 초보자이며 사용자 세부 정보를 mlab에 저장하려고하지만 암호의 해시를 저장할 수 없습니다. 해시가 계산되어 console.log에 표시되지만 mlab 문서에서는 해시 대신 일반 텍스트가 저장됩니다.mlab에 bcrypt를 사용하여 해시를 저장할 수 없지만 콘솔 해시에 표시됨

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); 
      } 
     }); 
     } 
    }); 
}); 

답변

1

해시 함수가 asynchronous이기 때문입니다. 코드 실행은 직선을 따르지 않습니다. 저장 함수는이 특별한 경우에 해시가 작성되기 전에 실행됩니다. 해시 콜백 내부에 저장을 중첩하면 먼저 해시를 생성 한 다음 저장합니다. 이처럼

:

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

고마워요, 솔루션이 성공적 일 –