javascript - 密码错误时请求被卡住(Async/Await)
问题描述
所以,我对异步等待很陌生。但我认为我应该在一个项目中实现它,看看它是如何真正工作并完全理解的。但我被卡住了,无法理解到底发生了什么。
所以在我的PERN应用程序中,我试图记录一个用户,所以请求来自前端,带有用户名和密码,然后我使用 findOne(sequelize), 方法来查找用户是否存在,以及对密码执行相同操作,但使用 bcrypt compare 函数进行比较。
但是,当用户输入错误的电子邮件或密码时,整个响应会以某种方式卡住,因为我得到了 500 的响应,尽管我已经处理了此类事件的错误。
我说它卡住了,因为我在 findOne 和比较功能的底部添加了一个控制台,它们没有记录,但只要电子邮件或密码正确,就会收到响应。
const { email, password } = req.body;
console.log({ email, password });
const user = await User.findOne({ where: { email } });
const passwordMatch = await bcyptjs.compare(password, user.password);
console.log('Cant Reach here when the fields are incorrect', password);
console.log('Cant Reach here when the fields are incorrect', user.password);
if (!user && !passwordMatch) {
return next({
message: 'Username or Password is incorrect.',
statusCode: 400,
});
}
解决方案
我认为您有错字(bcypt vc bcrypt):) 而且我认为当字段不匹配时该方法会拒绝。因此,您应该将比较包装在 try/catch 块中。或者你可以使用同步版本
bcrypt.compareSync(password, user.password);
这将返回 true 或 false
推荐阅读
- html - Google Apps脚本如何将事件侦听器添加到一组具有相同名称的复选框中的每个复选框
- c++ - 具有交错类型和非类型参数的参数包的模板
- vue.js - vuex 模块 appState 不适用于作为第一个参数传递的模块命名空间
- c# - 如何在asp.net MVC 5中以引导模式显示各种内容?
- assembly - 在 68k 中实现 while 循环
- php - 打开购物车 | 为所有客户组设置默认税率,包括将来可能添加的客户组 | PHP
- c - 需要帮助找到解决问题的逻辑解决方案
- python - 利用 Tkinter 的 Grid Manager 将按钮居中并填充整个框架
- oracle - 使用 kafka 从 oracle 流式传输数据
- nlp - 如何在 BILOU 的其他模型中使用地名词典特征作为输入