无法使用bcrypt保存哈希到mlab但是在控制台哈希上显示

时间:2017-12-09 20:15:43

标签: node.js mongodb express hash bcrypt

我是NodeJs的初学者并尝试将用户详细信息保存到mlab,但无法存储密码哈希值。哈希计算并出现在console.log中,但在mlab文档中,存储明文而不是哈希。

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

var db = mongojs('mongodb://admin:admin@ds133776.mlab.com: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 个答案:

答案 0 :(得分:1)

这是因为哈希函数是asynchronous。代码的执行不遵循直线。在此特定情况下执行散列之前运行save函数。如果将保存嵌套在哈希回调中,则首先创建哈希,然后进行保存。

像这样:

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