如何在axios调用中调用bcrypt

时间:2018-04-23 10:17:45

标签: javascript express axios bcrypt

我正在对某个json文件进行axios调用。基本上我试图从前端框架获取输入并通过express将数据传递给我的服务器。

所以我在这里尝试做的是,我想先将request.body.password中的密码加密,然后再将其保存到数据库中。

来自bcrypt的默认文档是使用回调的异步调用,所以我所做的是在加密前后控制日志结果,但似乎bycrypt只能在自身内部工作,并且在将密码保存到密码之前不加密密码数据库。

router.post('/call/user', (req, res) => {
  var user = new User(req.body);
    axios
        .get(
          `http://localhost:3000/mydata/data.json`
        )
        .then(response => {
          user.lat = response.data.results[0].geometry.location.lat;
          user.lng = response.data.results[0].geometry.location.lng;

          console.log('here is the user password... >>>>>>>>>', req.body.password) // returns original text password

            bcrypt.hash(req.body.password, 10, function(err, hash){
              if(err){
                console.log(err);
              }
              user.password = hash;
            });

            console.log('this is the hash password >>>>>>>>>', user.password)
// i expect this to return the encrypted password but it seems it doesn't encrypt it outside the callback


         // saving data to user
          user.save(err => {
            if (err) {
              console.log('problem adding user', err);
            } else {
              res.status(200).send();
            }
          });
        })
        .catch(err => {
          console.log('err on user', err);
          res.status(500).send();
        });
});

最后,如果我在console.log中这将显示原始文本密码而不加密保存到db。

知道我在这里缺少什么吗?如何修复我的功能来完成我想要它做的事情?

1 个答案:

答案 0 :(得分:0)

您是否尝试过使用技术1?

bcrypt.genSalt(saltRounds, function(err, salt) {
    bcrypt.hash(myPlaintextPassword, salt, function(err, hash) {
        // Store hash in your password DB.
    });
});

然后只返回user.password?