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.