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

У меня есть 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");
});

Потому что userAuthorised — глобальная переменная. Это не относится к запросу, оно применимо к каждому запросу от каждого клиента.

jonrsharpe 27.08.2024 15:37

Кажется, сейчас самое время начать изучать существующие функции аутентификации, а не создавать свои собственные.

David 27.08.2024 15:41

Вам следует найти лучший способ обработки авторизации. Проверьте jwt

Samuel Chibuike 27.08.2024 21:24
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
3
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

var userAuthorised = false;

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

userAuthorised = true;

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

Состояние

if (userAuthorised){

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

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

req.userAuthorised = true;

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

if (req.userAuthorised){

Другие вопросы по теме