Skip to content

Instantly share code, notes, and snippets.

@sagar-barapatre
Last active November 3, 2022 13:37
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sagar-barapatre/90a8e193c724cb63ad63bd34ab87a420 to your computer and use it in GitHub Desktop.
Save sagar-barapatre/90a8e193c724cb63ad63bd34ab87a420 to your computer and use it in GitHub Desktop.
Authenticate using Passport.js
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