【问题标题】:Unexpected identifier Syntax Error when using mysql and bcryptjs使用 mysql 和 bcryptjs 时出现意外的标识符语法错误
【发布时间】:2020-01-25 07:57:00
【问题描述】:

我在我的 Express 应用中使用 Mysql 我在 mysql db 中使用 bcryptjs 对用户进行哈希处理,并且很好。 使用此代码:

// register
router.post("/register", async (req, res) => {
  const hashed = await bcrypt.hash(req.body.pass, 10);
  const user = {
    uname: req.body.uname,
    phone: req.body.phone,
    pass: hashed
  };
  let sql = "INSERT INTO user SET ? ";
  db.query(sql, user, (err, result) => {
    if (err) throw err;
    console.log(`${user.uname} INSERTED INTO users`);
  });
});
// GET USERS
router.get("/users", (req, res) => {
  db.query("SELECT * FROM user", (err, results) => {
    if (err) {
      return res.send(err);
    } else {
      return res.json({
        data: results
      });
    }
  });
});

但是当我想登录用户并让 bcrypt 将请求的通行证与用户通行证进行比较时,它会给我这个错误: SyntaxError: Unexpected identifier

这就是我尝试过的:

// loggin
router.post("/login", async (req, res) => {
  var username = req.body.uname;
  var password = req.body.pass;
  db.query(
    "SELECT pass FROM user WHERE uname = ?",
    [username],
    (err, result, fields) => {
      try {
        if (await bcrypt.compare(password, result)) {
          console.log('Success')
        }
      } catch {
        console.log('catched')
      }
    }
  );
});

【问题讨论】:

  • db.query()的回调函数不是异步的,不能在里面使用await
  • @Barmar true :) 但现在错误不同了:Error: Illegal arguments: string, object

标签: javascript mysql node.js express bcrypt


【解决方案1】:

? 唯一一个原因你得到一些错误,这是因为你在没有async的函数中使用await

??‍? 你可以使用下面的代码?:

router.post("/login", async (req, res) => {
  var username = req.body.uname;
  var password = req.body.pass;
  db.query(
    "SELECT pass FROM user WHERE uname = ?",
    [username],
    async (err, result, fields) => {
      try {
        // if you're using mysql2, don't forget to change `result` with `result[0].pass`.
        // you can console.log(result) to see where is the field of your password plain text
        const isPassword = await bcrypt.compare(password, result);
        console.log(isPassword); // true
      } catch(ex) {
        console.log(ex); // false
      }
    }
  );
});

希望对你有帮助?。

【讨论】:

  • 谢谢!!!那个错误消失了,但我现在有了这个:Error: Illegal arguments: string, object
  • 您可以在我的答案代码中看到我的comments。确保您将数据库中的password 用作resultresult[0].pass。请先console.log它。你的密码明文在哪里
猜你喜欢
  • 2014-07-25
  • 1970-01-01
  • 1970-01-01
  • 2022-12-05
  • 2017-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多