Last active
November 3, 2022 13:37
-
-
Save sagar-barapatre/90a8e193c724cb63ad63bd34ab87a420 to your computer and use it in GitHub Desktop.
Authenticate using Passport.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const mongoose = require("mongoose"); | |
const passportLocalMongoose = require("passport-local-mongoose"); | |
const userSchema = new mongoose.Schema({ | |
email: { | |
type: String, | |
required: true, | |
unique: true, | |
}, | |
username: { | |
type: String, | |
required: true, | |
unique: true, | |
}, | |
}); | |
userSchema.plugin(passportLocalMongoose); | |
module.exports = mongoose.model("User", userSchema); | |
const flash = require("connect-flash"); | |
const passport = require("passport"); | |
const LocalStrategy = require("passport-local").Strategy; | |
const expressSession = require("express-session"); | |
const express = require("express"); | |
const router = express.Router({ mergeParams: true }); | |
const User = require(__dirname + "/../models/user"); | |
app.use( | |
express.json({ | |
type: ["application/json", "text/plain"], | |
}) | |
); | |
// express session config | |
app.use( | |
expressSession({ | |
secret: "bdscjbsdkjbvjkbsjkvb", | |
resave: false, | |
saveUninitialized: false, | |
}) | |
); | |
// passport config | |
app.use(passport.initialize()); | |
app.use(passport.session()); // allows persistent session | |
passport.serializeUser(User.serializeUser()); // what data sholud be stored in seesion | |
passport.deserializeUser(User.deserializeUser()); //get the user data from the stored seesion | |
passport.use(new LocalStrategy(User.authenticate())); // use the local strategy | |
// use flash in app | |
app.use(flash()); | |
// current user middleware config | |
app.use(function (req, res, next) { | |
res.locals.user = req.user; | |
res.locals.errorMessage = req.flash("error"); | |
res.locals.successMessage = req.flash("success"); | |
next(); | |
}); | |
router.post("/signup", async (req, res) => { | |
try { | |
const newUser = await User.register( | |
new User({ | |
email: req.body.email, | |
username: req.body.username, | |
}), | |
req.body.password | |
); | |
passport.authenticate("local")(req, res, () => { | |
req.flash("success", "You have successfully signed-in"); | |
res.redirect("/movie"); | |
}); | |
} catch (err) { | |
console.log(err); | |
res.send(err.message || err); | |
} | |
}); | |
// login form - new | |
router.get("/login", (req, res) => { | |
res.render("login"); | |
}); | |
// loged-in - post | |
router.post( | |
"/login", | |
passport.authenticate("local", { | |
successRedirect: "/movie", | |
failureRedirect: "/login", | |
successFlash: "you have succcessfully logged-in", | |
failureFlash: "Passward or username not correct!", | |
}) | |
); | |
// log out | |
router.get("/logout", (req, res) => { | |
req.logout(); | |
req.flash("success", "You have logged-out"); | |
res.redirect("/"); | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment