html - 通过 node.js 和 sqlite3 验证用户名和密码
问题描述
我有一个包含用户名和密码的表格,当有人在网页上输入它们时,我想对其进行身份验证。如果用户名和密码匹配,它会重定向到某个页面,如果不匹配,则会重定向到另一个页面。
我正在做的是使用 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'); }
})
解决方案
rows.forEach
在 in和 after内部调用函数rows.forEach
,你有if
声明而不是比较符号==
or ===
,你有分配符号=
,我认为这是一个问题。
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
.
推荐阅读
- node.js - 如何使用 SendGrid 将图像嵌入到 Node.js 中的 html 邮件
- google-maps - Agm 谷歌地图 - 如何将纬度和经度绑定到 HTML
- oauth-2.0 - 点击浏览器上的后退按钮后第二次登录时关联失败
- javascript - 在指定的时间内运行一个函数并停止
- c# - EF:当它们不为空时按2个字段排序
- php - 如何在 PHP 中突出显示 utf8 文本中的非 utf8 字符串?
- wordpress - 如何在 wordpress 中模拟检查元素结果?
- typescript - 在 TypeScript 中将字符串转换为枚举
- git - gpg:keyblock 资源 pubring.kbx 未找到,因为 repo 路径以 gnupg 主页为前缀
- python - 如何从 Python 列表中的字符串中获取重量和数量?