如何解决节点 js bcrypt 中的数据和哈希错误
how to resolve data and hash error in node js bcrypt
Error: data and hash arguments required
我正在使用节点 js 做简单的登录注册和忘记密码
bcrypt 哈希
代码:用于登录
app.post('/login', (req, res) => {
console.log('login');
let {email, password} = req.body;
User.updateOne({email: email}, ' email password', (err, userData) => {
if (!err) {
let passwordCheck = bcrypt.compareSync(password, userData.password);
if (passwordCheck) {
console.log('login2');
req.session.user = {
email: userData.email,
id: userData._id
};
req.session.user.expires = new Date(Date.now() + 3 * 24 * 3600 * 1000);
res.status(200).send('You are logged in, Welcome!');
} else {
res.status(401).send('incorrect password');
console.log('login3');
}
} else {
res.status(401).send('invalid login credentials');
console.log('login4');
}
});
});
注册码:
app.post('/signup', (req, res) => {
let {email, password} = req.body;
let userData = {password: bcrypt.hashSync(password, 5, null), email };
console.log('out save');
let newUser = new User(userData);
newUser.save().then(error => {
if (!error) {
console.log('in save');
return res.status(200).json('signup successful');
} else {
if (error.code === 11000) {
return res.status(409).send('user already exist!');
} else {
console.log(JSON.stringigy(error, null, 2));
return res.status(500).send('error signing up user');
}
}
});
});
我已经尝试在控制台记录几行,结果发现代码没有进入注册
newUser.save();
告诉我哪里错了
问题在于这一行 newUser.save().then(error => {
。你注意到.then()
了吗?这是一个已解决的承诺,因此它不会返回错误。通常你会看到这样的东西。
Promise()
.then((result) => {
// result is a resolved promise
})
.catch((error) => {
// error is a rejected promise
})
所以您应该尝试将代码更改为:
newUser.save()
.then(result => {
console.log('in save')
return res.status(200).json('signup successful')
})
.catch(error => {
if (error.code === 11000) {
return res.status(409).send('user already exist!')
} else {
console.log(JSON.stringigy(error, null, 2))
return res.status(500).send('error signing up user')
}
})
您似乎在使用 mongoose,这是 Document.prototype.save()
https://mongoosejs.com/docs/api.html#document_Document-save
的 API 文档
他们的文档大部分使用回调函数,但如果您滚动到 .save()
文档的末尾,您会看到他们展示了一个带有承诺的示例。
bcrypt.compareSync 接受 2 个参数; passwordToCheck, passwordHash
您遇到错误 "bcrypt Error: data and hash arguments required"
此错误表示一个或两个参数为空或未定义,
在您的情况下,您需要确保密码 userData.password 正确运行 bcrypt.compareSync
Error: data and hash arguments required
我正在使用节点 js 做简单的登录注册和忘记密码 bcrypt 哈希
代码:用于登录
app.post('/login', (req, res) => {
console.log('login');
let {email, password} = req.body;
User.updateOne({email: email}, ' email password', (err, userData) => {
if (!err) {
let passwordCheck = bcrypt.compareSync(password, userData.password);
if (passwordCheck) {
console.log('login2');
req.session.user = {
email: userData.email,
id: userData._id
};
req.session.user.expires = new Date(Date.now() + 3 * 24 * 3600 * 1000);
res.status(200).send('You are logged in, Welcome!');
} else {
res.status(401).send('incorrect password');
console.log('login3');
}
} else {
res.status(401).send('invalid login credentials');
console.log('login4');
}
});
});
注册码:
app.post('/signup', (req, res) => {
let {email, password} = req.body;
let userData = {password: bcrypt.hashSync(password, 5, null), email };
console.log('out save');
let newUser = new User(userData);
newUser.save().then(error => {
if (!error) {
console.log('in save');
return res.status(200).json('signup successful');
} else {
if (error.code === 11000) {
return res.status(409).send('user already exist!');
} else {
console.log(JSON.stringigy(error, null, 2));
return res.status(500).send('error signing up user');
}
}
});
});
我已经尝试在控制台记录几行,结果发现代码没有进入注册
newUser.save();
告诉我哪里错了
问题在于这一行 newUser.save().then(error => {
。你注意到.then()
了吗?这是一个已解决的承诺,因此它不会返回错误。通常你会看到这样的东西。
Promise()
.then((result) => {
// result is a resolved promise
})
.catch((error) => {
// error is a rejected promise
})
所以您应该尝试将代码更改为:
newUser.save()
.then(result => {
console.log('in save')
return res.status(200).json('signup successful')
})
.catch(error => {
if (error.code === 11000) {
return res.status(409).send('user already exist!')
} else {
console.log(JSON.stringigy(error, null, 2))
return res.status(500).send('error signing up user')
}
})
您似乎在使用 mongoose,这是 Document.prototype.save()
https://mongoosejs.com/docs/api.html#document_Document-save
他们的文档大部分使用回调函数,但如果您滚动到 .save()
文档的末尾,您会看到他们展示了一个带有承诺的示例。
bcrypt.compareSync 接受 2 个参数; passwordToCheck, passwordHash
您遇到错误 "bcrypt Error: data and hash arguments required"
此错误表示一个或两个参数为空或未定义, 在您的情况下,您需要确保密码 userData.password 正确运行 bcrypt.compareSync