我有一个包含用户名和密码的表,当有人在网页上输入时,我希望对其进行身份验证。如果用户名和密码匹配,它会重定向到某个页面,如果不是,那么它会重定向到另一个页面。
我正在做的是使用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'); }
})
答案 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 }