首页 > 解决方案 > 密码错误时请求被卡住(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,
    });
  }

标签: javascriptnode.jsexpress

解决方案


我认为您有错字(bcypt vc bcrypt):) 而且我认为当字段不匹配时该方法会拒绝。因此,您应该将比较包装在 try/catch 块中。或者你可以使用同步版本

bcrypt.compareSync(password, user.password);

这将返回 true 或 false


推荐阅读