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
Post a Comment