Неожиданный идентификатор Синтаксическая ошибка при использовании mysql и bcryptjs - PullRequest
1 голос
/ 25 января 2020

Я использую Mysql в своем Express приложении, которое я хэшировал, пропуская пользователей, используя bcrypt js в mysql db и все в порядке. используя этот код:

// 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')
      }
    }
  );
});

1 Ответ

0 голосов
/ 25 января 2020

? Единственная причина , почему вы получили какую-то ошибку, это потому, что вы используете await в функции без async

??‍? You можете использовать этот код ниже ?:

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
      }
    }
  );
});

Надеюсь, он вам поможет ?.

...