bcrypt.compare не может установить заголовки ответа в nextjs - PullRequest
1 голос
/ 26 сентября 2019

Я не могу получить правильные заголовки ответа, когда мой код вводит bcrypt.compare.Сначала я думал, что это проблема с корсом, но я все равно получаю правильный ответ, если я ввел неправильный код и отображается сообщение «пользователь не существует».

Вот мой код на стороне сервера api в экспрессе

router.post("/api/signIn", (req, res) => {
  const { user, password } = req.body;
  const queryString = "SELECT * FROM users WHERE user_id = ?";
  db.query(queryString, [user])
    .then(result => {
      if (result.length > 0) {
        const hash = result[0].password;

        //here bcrypt.compare works server side or with cURL but won't set the response headers in the browser

        bcrypt
          .compare(password, hash)
          .then(same => {
            if (same === true) {
              console.log("correct password");
              res.status(200).json({
                code: 200,
                message: "correct password"
              });
            } else {
              res.status(401).json({
                code: 401,
                message: "incorrect password"
              });
            }
          })
          .catch(err => console.log(err));
      } else {

      //this one works though and i can get the response in the browser so it can't be a cors issue

        console.log("user does not exist");
        res.status(200).json({
          code: 401,
          message: "User does not exist"
        });
      }
    })
    .catch(err => {
      console.log("error" + err.message);
    });
});

и это тестовая функция, которую я использую в реакции

  const signIn = () => {
    fetch("http://localhost:5000/api/signIn", {
      method: "POST",
      body: JSON.stringify({
        user: userName,
        password: password
      }),
      headers: {
        "Content-Type": "application/json"
      },
    })
      .then(res => res.json())
      .then(response => alert(response.code + response.message))
      .catch(err => alert(err));
  };

, поэтому, если я введу неправильное имя пользователя, которого нет в базе данных, отобразится функция предупреждения (code401User не существует), но если я введу правильного пользователя bcrypt.compare(), кажется, не устанавливает ответ для правильных и неправильных паролей, и я получил бы (TypeError: не удалось получить).хотя тестирование API в cURL работает.

1 Ответ

0 голосов
/ 28 сентября 2019

Понятно, я забыл поместить event.preventDefault () в функцию выборки.

...