我正在尝试使用aws lambda,猫鼬和bcryptjs创建登录api。 我的lambda处理程序使用async,我只是想通过使用bcryptjs模块中的bcrypt.compare()函数将用户输入的密码与数据库中已经哈希的密码进行比较。但是,我的代码不断给我Promise {},所以我尝试了多种方法来解决此问题,但仍然有问题。我是使用异步的新手,所以我可能做的完全错了,所以请不要对我苛刻:)
我通过使用以下代码从MongoDB地图集获取具有加密密码的用户帐户数据,并且它运行良好。
let user = await User.findOne(query).select('_id name email password');
我还有一个在user.js文件中创建的猫鼬方法,如下所示。
UserSchema.methods.comparePassword = function(password) {
return bcrypt.compare(password, this.password);
};
因此将调用上述方法,并使用以下代码在console.log中打印结果。
let passwordValid = user.comparePassword(parameters.password);
console.log('Password is validated', passwordValid);
它给了我
INFO Password is validated Promise { <pending> }
在lambda控制台中。
我已经进行了很多搜索,所以我尝试使用await在comparePassword之前,如下所示,但仍然无法正常工作。
let passwordValid = await user.comparePassword(parameters.password);
我还尝试通过使用如下的then()来解决返回的诺言
let passwordValid = user.comparePassword(parameters.password);
passwordValid.then(function(err, result) {
callback(null, {
"statusCode": 200,
"headers": {
"Content-Type": "application/json"
},
"body": JSON.stringify({
"success": false,
"content": result
})
});
});
但是,这仍然无法按照我的意愿工作。我收到的唯一回复是
{
"message": "Internal server error"
}
答案 0 :(得分:0)
您看到过这个https://www.npmjs.com/package/bcrypt吗?
在这一行中,需要等待:
return bcrypt.compare(password, this.password);
如上面的链接所示:
async function checkUser(username, password) {
//... fetch user from a db etc.
const match = await bcrypt.compare(password, user.passwordHash);
if(match) {
//login
}
//...
}