错误:需要数据和哈希参数
我正在使用以下方法在节点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();
告诉我我要去哪里
答案 0 :(得分:1)
问题在于此行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')
}
})
您似乎在使用猫鼬,这是Document.prototype.save()
https://mongoosejs.com/docs/api.html#document_Document-save
他们的文档大部分使用回调函数,但是如果滚动到.save()
文档的末尾,则会看到它们显示了一个带有承诺的示例。
答案 1 :(得分:0)
bcrypt.compareSync具有2个参数; passwordToCheck,passwordHash
您遇到错误“ bcrypt错误:需要数据和哈希参数”
此错误表示一个或两个参数为null或未定义, 您需要确保密码userData.password正确输入到函数bcrypt.compareSync
中。