fix/login+signup+logout session bugs
This commit is contained in:
5 files changed
+94
-42
No files matched your search
+35
-7
@@ -1,5 +1,6 @@
|
||||
const status = require("../util/statuses");
|
||||
const session = require("express-session");
|
||||
const ObjectId = require("mongodb").ObjectId;
|
||||
|
||||
// Get all names of user routes
|
||||
let userRouter = require("../router/user")((req, res, next) => next(), null, null, null);
|
||||
@@ -18,26 +19,53 @@ const createMiddleware = (users) => {
|
||||
return res.status(status.NotFound).redirect("/notFound");
|
||||
}
|
||||
|
||||
if (!req.session.authenticated || !req.session.email) {
|
||||
if (!req.session.authenticated || !req.session.userId) {
|
||||
req.session.errMessage = "Please login to view that resource";
|
||||
res.redirect("/login");
|
||||
return res.status(status.Unauthorized);
|
||||
}
|
||||
|
||||
if (!req.session.user) {
|
||||
let user = await users.findOne({ "email": req.session.email }).then((user) => user);
|
||||
let user = await users.findOne({ _id: new ObjectId(req.session.userId) }).then((user) => user);
|
||||
|
||||
if (!user) {
|
||||
req.session.errMessage = "User not found";
|
||||
res.redirect("/login");
|
||||
return res.status(status.Unauthorized);
|
||||
return req.session.destroy((err) => {
|
||||
if (err) {
|
||||
console.error("Failed to destroy session: ", err);
|
||||
req.session.errMessage = "Failed to logout. Please try again";
|
||||
res.status(status.InternalServerError);
|
||||
return res.redirect("/home");
|
||||
}
|
||||
|
||||
req.session.errMessage = "User not found";
|
||||
res.status(status.NotFound);
|
||||
res.redirect("/login");
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
req.session.user = user;
|
||||
return req.session.save((err) => {
|
||||
if (err) {
|
||||
console.error("Failed to save session: ", err);
|
||||
|
||||
return req.session.destroy((err) => {
|
||||
req.session.errMessage = "An error occured, please login again.";
|
||||
|
||||
if (err) {
|
||||
console.error("Failed to destroy session: ", err);
|
||||
}
|
||||
|
||||
res.status(status.InternalServerError);
|
||||
res.redirect("/login");
|
||||
});
|
||||
}
|
||||
|
||||
next();
|
||||
});
|
||||
}
|
||||
|
||||
next();
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
module.exports = createMiddleware;
|
||||
Reference in new issue
Block a user