最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

在使用的NodeJS bcrypt密码哈希

IT培训 admin 5浏览 0评论

在使用的NodeJS bcrypt密码哈希

我使用"bcrypt": "^3.0.4",我有节点的最新稳定版本。当用户试图登录我现在面临的问题是。使用正确的密码在初始登录尝试总是不成功,而在第二次尝试是成功的。我想知道我在哪里得到它错了。这里的假设是,用户输入一个电子邮件/用户名可以使用到数据库中,在这种情况下,MongoDB的。

User.findOne({ "email": user.email }, (err, ruser) => {
    if (err) {
        res.send(err);
    }
    else {
        bcrypt.hash(user.password, 10, function (err, hash) {
            if (err) {
                console.log(err);
            }
            else {
                bcryptpare(user.password, hash).then(function (res) {
                    if (res) {
                        pass = true;
                    }
                    else {
                        pass = false;
                    }
                });
                res.json(pass);
            }
        });
    }
});

先感谢您。

回答如下:

有你的代码的两个问题。

  1. bcryptpare是异步和res.json是。那么外面,所以res.json是比较前居然跑或pass其设置。
  2. pass不与var / let定义的,所以pass成为一个全局变量,这是严重的安全含意,因为在同时两个用户日志记录将导致争用条件(例如,从会话甲pass可以res.json-ED中会议B)

它可以作为以上两种错误的结果,在第一个请求,之前没有设置比较res.json尚未执行pass,所以它返回null。在第二次请求,再次res.json执行前相比,但是这一次的pass包含最后的值进行比较,这样你就得到什么实际最后比较的结果。

此外,它也可以,如果你只是测试,否则该代码不执行任何操作,因为此代码生成用于给定的密码散列,并给定密码所生成的散列,这绝对应该总是正确的。

在使用的NodeJS bcrypt密码哈希

我使用"bcrypt": "^3.0.4",我有节点的最新稳定版本。当用户试图登录我现在面临的问题是。使用正确的密码在初始登录尝试总是不成功,而在第二次尝试是成功的。我想知道我在哪里得到它错了。这里的假设是,用户输入一个电子邮件/用户名可以使用到数据库中,在这种情况下,MongoDB的。

User.findOne({ "email": user.email }, (err, ruser) => {
    if (err) {
        res.send(err);
    }
    else {
        bcrypt.hash(user.password, 10, function (err, hash) {
            if (err) {
                console.log(err);
            }
            else {
                bcryptpare(user.password, hash).then(function (res) {
                    if (res) {
                        pass = true;
                    }
                    else {
                        pass = false;
                    }
                });
                res.json(pass);
            }
        });
    }
});

先感谢您。

回答如下:

有你的代码的两个问题。

  1. bcryptpare是异步和res.json是。那么外面,所以res.json是比较前居然跑或pass其设置。
  2. pass不与var / let定义的,所以pass成为一个全局变量,这是严重的安全含意,因为在同时两个用户日志记录将导致争用条件(例如,从会话甲pass可以res.json-ED中会议B)

它可以作为以上两种错误的结果,在第一个请求,之前没有设置比较res.json尚未执行pass,所以它返回null。在第二次请求,再次res.json执行前相比,但是这一次的pass包含最后的值进行比较,这样你就得到什么实际最后比较的结果。

此外,它也可以,如果你只是测试,否则该代码不执行任何操作,因为此代码生成用于给定的密码散列,并给定密码所生成的散列,这绝对应该总是正确的。

与本文相关的文章

发布评论

评论列表 (0)

  1. 暂无评论