在使用的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);
}
});
}
});
先感谢您。
回答如下:有你的代码的两个问题。
bcryptpare
是异步和res.json
是。那么外面,所以res.json
是比较前居然跑或pass
其设置。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);
}
});
}
});
先感谢您。
回答如下:有你的代码的两个问题。
bcryptpare
是异步和res.json
是。那么外面,所以res.json
是比较前居然跑或pass
其设置。pass
不与var
/let
定义的,所以pass
成为一个全局变量,这是严重的安全含意,因为在同时两个用户日志记录将导致争用条件(例如,从会话甲pass
可以res.json-ED中会议B)
它可以作为以上两种错误的结果,在第一个请求,之前没有设置比较res.json
尚未执行pass
,所以它返回null。在第二次请求,再次res.json
执行前相比,但是这一次的pass
包含最后的值进行比较,这样你就得到什么实际最后比较的结果。
此外,它也可以,如果你只是测试,否则该代码不执行任何操作,因为此代码生成用于给定的密码散列,并给定密码所生成的散列,这绝对应该总是正确的。