POST LOGIN PAGE

 HERE IN OUR WEBSITE WHEN A  USER WANTS TO ADD A NEW LISTING HE NEEDS TO BE LOGGED IN FIRST. AFTER LOGGING IN USER IS REDIRECTED TO ALL LISTINGS PAGE INSTEAD OF ADD NEW LISTING PAGE.

TO SOLVE THIS WE USE req OBJECT . THE req OBJECT HAS MANY FIELDS INCLUDING A FIELD OriginalUrl IT CONTAINS THE ORIGINAL PATH OF THE ROUTE.

WE STORE THE ORIGINAL URL AS IT NEEDS TO BE ACCESSED EVERYWHERE AND THE PASSPORT METHOD RESETS THE res.session  SO,THE REDIRECTING URL BECOMES UNDEFINED.HENCE ,WE STORE IT IN LOCALS(res.locals) IN A MIDDLEWARE.

MIDDLEWARE.JS

module.exports.isLoggedIn = (req, res, next) => {
  if (!req.isAuthenticated()) {
    req.session.redirectURL = req.originalUrl;
    req.flash("error", "You must Login First!");
    return res.redirect("/login");
  }
  next();
};

module.exports.saveRedirectedUrl = (req, res, next) => {
  if (req.session.redirectURL) {
    res.locals.redirectURL = req.session.redirectURL;
  }
  next();
};

USER.JS

router.post(
  "/login",
  saveRedirectedUrl,
  passport.authenticate("local", {
    failureRedirect: "/login",
    failureFlash: true,
  }),
  async (req, res) => {
    req.flash("success", "Welcome Back!");
    let redirectURL = res.locals.redirectURL || "/listings";
    res.redirect(redirectURL);
  }
);


let redirectURL = res.locals.redirectURL || "/listings";

WHEN WE DIRECTLY LOGIN FROM THE HOME PAGE ERROR OCCURS THAT EXPLAINS THAT "/listings" PATH IS NOT TRIGGERED. HENCE WE USE THIS LINE.

WHICH MEANS THAT IF A REDIRECTURL EXISTS THEN IT IS ASSIGNED AS REDIRECT URL BUT WHEN IT IS EMPTY THE PATH IS "/listings".







Comments