Как получить хешированный пароль из БД в Node.js, чтобы bcrypt мог его сравнить - PullRequest
0 голосов
/ 18 июня 2020

У меня есть страница регистрации, на которой пользователи могут отправить запрос в базу данных. Перед отправкой запроса я изменяю пароль на алгоритм salt + ha sh.

ПРИМЕР ИЗ БД:

имя пользователя: aUser1234

пароль: password12345

hashed: $2b$13$dTbz4IeMdeXkqHwCL7Lzqe8NKNyKBvA2mQWk8gnPDLWc4O6hyvew2

Я пытаюсь получить хешированный пароль из своей базы данных, но у меня есть три вопроса по моему коду.

  1. Как получить доступ к хешированный пароль из базы данных после проверки существования имени пользователя?
  2. Как мне затем использовать await bcrypt.compare(password, hashedPassowrd); в getConnection().query()...
  3. Должна ли функция обратного вызова router.post быть async также?
router.post('/user_login', async (req, res) => { //Does this needs to be an async callback function?

    const username = req.body.thisUsername; //aUser1234
    const password = req.body.thisPassword; //password12345

    const sqlString = "SELECT username FROM student_demographics WHERE username = ?";

    getConnection().query(sqlString, [username], async (err, results, fields) => {

        if(err){
            res.sendStatus(500);      
        }

        if(results.length){ 

            console.log("NO ERRORS HERE");   //WORKS OKAY UNTIL HERE

            //HOW TO GET HASHED PASSWORD AND STORE IT ON VARIABLE
            const isValid = await bcrypt.compare(password, hashedPassowrd); //ERROR

            if(isValid){
                //PASSWORD MATCHED
                res.redirect('/homePage.html');
                res.end();
            }else{
                //PASSWORD DIDN'T MATCH
                res.redirect('/login.html');
            }
        }else{ //THE USERNAME DOES NOT exists
            console.log("    > The username or password are invalid :(")
            res.redirect('/login.html');
            res.end();
        }
    });
});

1 Ответ

1 голос
/ 18 июня 2020

Вам нужно будет выбрать хешированный пароль из базы данных для сравнения.

Может быть что-то вроде этого:

router.post("/user_login", (req, res) => {
  const username = req.body.thisUsername; //aUser1234
  const password = req.body.thisPassword; //password12345
  const sqlString = "SELECT hashed_password FROM student_demographics WHERE username = ? LIMIT 1";

  getConnection().query(sqlString, [username], async (err, results, fields) => {
    if (err) {
      console.log(err);
      res.sendStatus(500);
      return;
    }
    if (!results.length) {
      console.log("    > The username is invalid :(");
      res.redirect("/login.html");
      res.end();
      return;
    }
    const [hashedPassword] = results[0];
    const isValid = await bcrypt.compare(password, hashedPassword);
    if (isValid) {
      //PASSWORD MATCHED
      res.redirect("/homePage.html");
      res.end();
    } else {
      console.log("    > The password is invalid :(");
      res.redirect("/login.html");
      res.end();
      return;
    }
  });
});

Обратите внимание, что вы ничего не делаете с информацией для входа, хотя (вы можете сохранить его в сеансе или приготовить ie).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...