通过node.js和sqlite3验证用户名和密码

时间:2018-05-30 06:03:17

标签: html node.js sqlite

我有一个包含用户名和密码的表,当有人在网页上输入时,我希望对其进行身份验证。如果用户名和密码匹配,它会重定向到某个页面,如果不是,那么它会重定向到另一个页面。

我正在做的是使用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 :(得分:0)

rows.forEach内部和rows.forEach之后的内部通话功能,您有if声明,而不是比较符号=====,您已指定了= {1}},我认为这是一个问题。

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

答案 1 :(得分:0)

您的代码存在以下问题

A)

if (row.username = req.body.username) {
它应该是 if(row.username == req.body.username){//比较而非赋值

B)

比较应该是用户名和密码

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

之后

if(x==1){// do something}
else{ //do something else }