PROJECT PHASE 2 (PART-E) CONNECTING LOGIN

PASSPORT PROVIDES AN IN-BUILT FUNCTION Authenticate()   TO CHECK IF THE USER IS LOGGED IN OR NOT.

WE CREATE A SEPERATE MIDDLEWARE FUNCTION TO AUTHENTICATE AND STORE IT IN A SEPERATE FILE.

MIDDLEWARE.JS

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

IN LISTING.JS

const { isLoggedIn } = require("../middleware.js");

WE ADD THIS MIDDLEWARE TO ROUTES LIKE CREATE ,EDIT AND DELETE.


// NEW ROUTE
router.get("/new",isLoggedIn, (req, res) => {
  res.render("listings/new.ejs");
});
router.post(
  "/",isLoggedIn,
  ValidateListing,
  wrapAsync(async (req, res, next) => {
    const newListing = new Listing(req.body.listing);

    await newListing.save();
    req.flash("success", "New Listing Added!");
    res.redirect("/listings");
  })
);


// EDIT ROUTE
router.get(
  "/:id/edit",isLoggedIn,
  wrapAsync(async (req, res) => {
    let { id } = req.params;
    const listing = await Listing.findById(id);
    if (!listing) {
      req.flash("error", "Listing requested doesn't exist!");
      res.redirect("/listings");
    }
    res.render("listings/edit.ejs", { listing });
  })
);
// UPDATE ROUTE
router.put(
  "/:id",isLoggedIn,
  ValidateListing,
  wrapAsync(async (req, res) => {
    if (!req.body.listing) {
      throw new ExpressError(400, "send valid data!");
    }
    let { id } = req.params;
    await Listing.findByIdAndUpdate(id, { ...req.body.listing });
    req.flash("success", "Updated Successful!");

    res.redirect(`/listings/${id}`);
  })
);

// DELETE ROUTE
router.delete(
  "/:id",isLoggedIn,
  wrapAsync(async (req, res) => {
    let { id } = req.params;
    let deletedList = await Listing.findByIdAndDelete(id);
    console.log(deletedList);
    req.flash("success", "Listing Deleted!");

    res.redirect("/listings");
  })
);









Comments