проверка имени пользователя и пароля через node.js и sqlite3 - PullRequest
0 голосов
/ 30 мая 2018

У меня есть таблица с именами пользователей и паролями, которые я хочу аутентифицировать, когда кто-то вводит их на веб-странице.Если имя пользователя и пароль совпадают, он перенаправляет на определенную страницу, а если нет, то перенаправляет на другую.

Я использую оператор Select, чтобы выбрать только строку, в которой имя пользователя ипароль соответствует введенной информации.Таким образом, в результирующем запросе будет либо только одна строка, если имя пользователя и пароль совпадают, либо нет.

Проблема, с которой я сталкиваюсь, заключается в том, что она продолжает перенаправлять только на первую страницу.Я предполагаю, что это как-то связано с ответом, но я не могу понять это.Любая помощь будет очень признательна.

app.post('/Login', function (req, res, next) {

let sql = `SELECT * FROM Login WHERE (username = "${req.body.username}" AND password = "${req.body.password}")`
var x;

db.all(sql, function (err, rows) {
    rows.forEach(function (row) {
        if (row.username = req.body.username) {
            x = 1;
        }
        else {
            x = 2;
            db.close();
        }
    })
    if (x = 1) {
        res.redirect('/index3');
    }
    else { res.redirect('/index2'); }

})

Ответы [ 2 ]

0 голосов
/ 30 мая 2018

у вас ниже проблемы с вашим кодом

A)

if (row.username = req.body.username) {

так и должно быть, если (row.username == req.body.username) {// сравнение, а неприсвоение

B)

сравнение должно проводиться как по имени пользователя, так и по паролю

if (row.username == req.body.username) {
  x = 1;
}

и после этого

if(x==1){// do something}
else{ //do something else }
0 голосов
/ 30 мая 2018

Внутри функции вызова в rows.forEach и после rows.forEach у вас есть оператор if, и вместо знака сравнения == или === вы назначаете знак =, я думаю, что это проблема.

if (row.username === req.body.username) {
  x = 1;
}

if (x === 1) {
    res.redirect('/index3');
}

Попробуйте:

app.post('/Login', (req, res, next) => {
 let sql = `SELECT * FROM Login WHERE username = "${req.body.username}" AND password = "${req.body.password}"`;
 var x;

 db.all(sql, (err, rows) => {
  if (err) {
    next(err);
    return;
  }
  if (!rows) {
    res.status(400);
    res.send('Invalid username or password');
    return
  }
  rows.forEach((row) => {
    if (row.username === req.body.username && row.password === req.body.password) {
        x = 1;
    }
    else {
        x = 2;
        db.close();
    }
  })
  if (x === 1) {
    res.redirect('/index3');
  }
  else { res.redirect('/index2'); }
 })

ВАЖНО! Никогда не храните пароли пользователей в открытом виде.Всегда хэшируйте их перед вставкой в ​​базу данных.Хорошая хеш-функция для хранения пароля: bcrypt.

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