Экспресс-сессия, обновляющая все данные при посещении страницы / навигации по странице - PullRequest
0 голосов
/ 11 января 2019

Я пишу бэкэнд для веб-сайта, используя node.js и машинопись. Недавно я провел сеансы, в которых храню пользовательские данные и язык, который они выбрали на сайте для будущего использования. Однако, когда пользователь перезагружает страницу или посещает другую часть моего веб-сайта, данные сеанса обновляются, я пытался изменить часть, где я инициализирую сеанс, и редактирую свою функцию, которая заполняет данные пользователя в сеансе. Проблема в том, что мой файл populateuserdata запускается постоянно, даже если пользовательские данные уже есть, и я не могу понять, почему он это делает.

const apiRouter = require("./routes/routes");
const session = require ("express-session");
const RedisStore = require("connect-redis")(session);


app.use(session({
  store: new RedisStore(),
  secret: "test",
  cookie: { maxAge: 24 * 60 * 60 * 1000 }, // 1 day
  resave: true,
  autoreconnect: true,
  saveUninitialized: true,

}));

app.use(morgan("dev"));
app.use(compression());
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: true}));
app.set("port", 3000);
app.set("views", path.join(__dirname, "../views"));
app.set("view engine", "pug");
app.use(require("./services/populateUserData"));
app.get("/", homeController.index);
app.use("/", apiRouter);
app.use(expressValidator);
app.use(flash);
app.use(lusca.xframe("SAMEORIGIN"));
app.use(lusca.xssProtection);   

И мой файл populateuserdata такой:

import { Request, Response, NextFunction } from "express";
const authService = require("./authService");
module.exports = (req: Request, res: Response, next: NextFunction)    => {
if (!req.session.userData) {
req.session.userData = authService.getUserData(req.headers);
req.session.userData.uid = req.headers["shib-uid"];
req.session.userData.ip = req.headers["x-forwarded-for"] || (req.connection && req.connection.remoteAddress) || "";
next();
}
else {
    next();
}
 };

Итак, я подумал, что оператор if в файле populateuserdata не позволит сеансу переопределить пользовательские данные, когда данные уже есть, я что-то упустил?

Заранее большое спасибо!

/ V

...