需要执行此作业,即用户输入用户名和密码,如果与数据库匹配,则会将用户发送到配置文件页面,其中显示“你好<%= user.username%>,看来无法正常工作” ,它始终停留在同一页面上,但是从数据库中获取用户信息。
早期的版本可以正常工作,并将用户发送到个人资料页面,但是即使输入错误,它仍然会将其发送给他,因此很明显我尝试阻止这种情况。
const express = require('express');
const bodyParser = require("body-parser");
const app = express();
const connection = require("./connect");
// parse application/x-www-form-urlencoded
var urlencodedParser = bodyParser.urlencoded({ extended: false });
app.set("view engine", "ejs");
// DB
connection.connect((err) => {
if (err) throw err;
else console.log("Database connected!");
});
app.get("/", (req, res) => {
res.render("login");
});
app.get("/profile", (req, res) => {
console.log(user);
res.render("profile", { user })
})
app.post("/", urlencodedParser, async (req, res) => {
user = await queryFunction("select * from users where users.username = " + connection.escape(req.body.username) +
" and users.password = " + connection.escape(req.body.password));
console.log(user)
if (req.body.username === user.username && req.body.password === user.password) return res.redirect("/profile")
else console.log("Something went wrong!")
});
async function queryFunction(queryString) {
let results = await new Promise((resolve, reject) => connection.query(queryString, (err, results) => {
if (err) {
reject(err);
}
else {
resolve(results);
}
}))
return results;
};
答案 0 :(得分:0)
您可以使用express-session
包来跟踪用户会话。本示例默认使用MemoryStore
。
注意:
默认的服务器端会话存储MemoryStore不是专门为生产环境设计的。在大多数情况下,它将泄漏内存,不会扩展到单个进程,而是用于调试和开发。
您可以使用db
存储会话。根据{{1}}类型,有各种可用的连接器。有关会话和数据库连接器cte
db
在其他地方,例如,
var session = require('express-session')
app.use(session({
secret: 'keyboard cat',
resave: false,
saveUninitialized: true,
cookie: { secure: true }
}))
app.post("/", urlencodedParser, async (req, res) => {
...
if (req.body.username === user.username && req.body.password === user.password) {
// you can then set some variable to session to track login status
res.session.loggedin = true
return res.redirect("/profile")
}
else console.log("Something went wrong!")
});