res.redirect keeps getting called multiple times but doesnt redirect

79 views Asked by At

My express app:

const https = require("https");
const http = require("http");
const path = require("path");
const express = require("express");
const cookieParser = require("cookie-parser");
const dotenv = require("dotenv");
const cors = require("cors");
const helmet = require("helmet");
const logger = require("morgan");
const compression = require("compression");
const session = require("express-session");
const pgSession = require("connect-pg-simple")(session);
const api = require("../server/routes");
const pool = require("../config/database");
/** ====== DotENV configuration */
dotenv.config({ path: require("find-config")(".env") });

const configurations = {
    production: { ssl: true, port: process.env.PORT, hostname: "" },
    development: {
        ssl: false,
        port: process.env.PORT,
        hostname: process.env.STAGE_HOSTNAME,
    },
};

const environment = process.env.NODE_ENV || "development";
const config = configurations[environment];

const {
    responseHandlerMiddleware,
    sessionChecker,
} = require("../server/middlewares");

const app = express();

var credentials = {
    // key: fs.readFileSync("/etc/letsencrypt/live/myresorts.in/privkey.pem"),
    // cert: fs.readFileSync("/etc/letsencrypt/live/myresorts.in/fullchain.pem"),
};

let server = config.ssl
    ? https.createServer(credentials, app)
    : http.createServer(app);

app.use(cors());
app.options("*", cors());
app.use(helmet());
app.use(compression());
app.use(logger("dev"));
app.use(express.json({ limit: "20mb" }));
app.use(express.urlencoded({ extended: true }));
app.use(cookieParser());
app.set("trust proxy", 1);
app.use(
    session({
        store: new pgSession({
            pool,
            tableName: "session",
        }),
        name: "user_sid",
        secret: process.env.SESSION_SECRET,
        resave: false,
        cookie: { secure: false, maxAge: 600000000000 },
        saveUninitialized: false,
    })
);
app.set("views", path.resolve(__dirname, "../views"));
app.set("view engine", "ejs");
app.use(express.static("../public"));

app.get("/", sessionChecker, (req, res) => {
    res.redirect("/login");
});

app.use((req, res, next) => {
    if (req.session.user && req.cookies.user_sid) {
        res.redirect("/dashboard");
    } else {
        return next();
    }
});

app.route("/login").get(sessionChecker, (req, res) => {
    res.render("pages/login");
});
app.route("/register").get(sessionChecker, (req, res) => {
    res.render("pages/register");
});
app.route("/dashboard").get(sessionChecker, (req, res) => {
    if (req.session.user && req.cookies.user_sid) {
        res.render("pages/dashboard");
    } else {
        res.redirect("/login");
    }
});

app.use("/", sessionChecker, api);

module.exports = server;

sessionChecker middleware:

const sessionChecker = (req, res, next) => {
    console.log("sesson ---------", req.session.user);
    console.log("cookies ---------", JSON.stringify(req.cookies));
    if (req.session.user && req.cookies.user_sid) {
        res.redirect("/dashboard");
    } else {
        return next();
    }
};

registerUser:

const catchAsync = require("../utilities/catchAsync");
const {
    generatePassword,
    validatePassword,
} = require("../utilities/passwordUtilities");
const pool = require("../../config/database");

const registerUser = catchAsync(async (req, res, next) => {
    const { email, password } = req.body;
    const user = await pool.query("select * from find_user_by_email($1)", [
        email,
    ]);
    if (user.rowCount) {
        res.error = "User already exists";
        return next(500);
    }
    const saltHash = generatePassword(password);
    const response = await pool.query("select * from create_user($1, $2, $3)", [
        email,
        saltHash.salt,
        saltHash.hash,
    ]);
    if (response.rowCount) {
        req.session.user = { email: response.rows[0].create_user };
        res.redirect("/dashboard");
    } else {
        res.redirect("/register");
    }
});

The redirect to /dashboard should take me to the dashboard after registering. But, that doesn't seem to happen, instead, this keeps getting called multiple times and then it stops:

GET /dashboard 302 255.451 ms - 64

Also, the console.log print nothing in the session checker. That is another issue in the same app above.

0

There are 0 answers