首页 > 解决方案 > 如果用户名和密码匹配数据库,则登录用户并将他发送到个人资料页面,否则 console.log("error")

问题描述

需要做这个作业,用户输入他的用户名和密码,如果它匹配数据库会将用户发送到配置文件页面,其中显示“你好 <%= 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;
};

标签: javascriptmysqlnode.jsexpressbody-parser

解决方案


您可以使用express-session包来跟踪用户会话。此示例MemoryStore用作默认值。

笔记:

默认的服务器端会话存储 MemoryStore 故意不是为生产环境设计的。它在大多数情况下会泄漏内存,不会扩展到单个进程,并且用于调试和开发。

你可以db用来存储你的会话。根据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!")
});

例如,您可以在其他地方

app.get("/profile", (req, res) => {
  if (!req.session.loggedin) {
    res.render("login");
  } else {
    console.log(user);
    res.render("profile", { user })
  }
})

推荐阅读