Почему он открывается при любом проходе после того, как я один раз ввел правильный пароль?

У меня есть 2 HTML-файла: один с формой (который принимает пароль), а другой с секретами. Я написал этот js-код, но когда я его запускаю, он отклоняет каждый неправильный пароль, пока я не введу правильный пароль один раз, а затем, когда я вернусь, он также заберет все неправильные пароли.

Где я ошибаюсь?

import express from "express";
import { dirname } from "path";
import { fileURLToPath } from "url";
const __dirname = dirname(fileURLToPath(import.meta.url));
import bodyParser from "body-parser";


const app = express();
var userAuthorised = false;

app.use(bodyParser.urlencoded({extended: true}));

function passCheck(req, res, next) {
    
    if (req.body["password"] === "ILoveProgramming"){
        userAuthorised = true;
    }
    next();
}

app.use(passCheck);

app.get("/", (req, res) => {
    res.sendFile(__dirname + "/public/index.html");
});

app.post("/check", (req, res) => {
    console.info(req.body);
    if (userAuthorised){
        res.sendFile(__dirname + "/public/secret.html");
    }
    else {
        res.redirect("/");
    }
});

app.listen(3000, () => {
    console.info("Server Running on port 3000");
});

🤔 А знаете ли вы, что...
JavaScript можно использовать для создания видеоигр, как 2D, так и 3D, с использованием библиотеки Three.js.


51
1

Ответ:

Решено

Когда вы запускаете сервер, вы инициализируете

var userAuthorised = false;

Однажды он настроен на

userAuthorised = true;

ей никогда не присваивается значение false, потому что это глобальная переменная, и инициализация происходит только один раз в начале.

Состояние

if (userAuthorised){

всегда будет истинным после первого правильного входа в систему.

Решение состоит в том, чтобы не использовать для этого глобальную переменную. Распространенным шаблоном в Express является сохранение в запросе дополнительных значений, например.

req.userAuthorised = true;

и проверьте их с помощью

if (req.userAuthorised){