Войдите в систему пользователя и отправьте его на страницу профиля, если имя пользователя и пароль совпадают с базой данных, иначе console.log ("error") - PullRequest
0 голосов
/ 08 апреля 2019

Нужно сделать это домашнее задание, когда пользователь вводит свое имя пользователя и пароль, и, если оно совпадает с базой данных, отправит пользователя на страницу профиля, где будет написано «Здравствуйте, <% = 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;
};

1 Ответ

0 голосов
/ 08 апреля 2019

Вы можете использовать пакет 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 })
  }
})
...