Blaksky
Blaksky

Reputation: 31

Node.JS Passport Not staying logged in

everyone. I have been having this issue where when I log in, I cannot sty logged in. Yes I have the express-session module and have it setup with no errors. When I try to do something that requires you to be logged when I should already be logged in, it just brings me to the login page (I have programed that). Thank you very much for all of your help. Sorry if this is a dumb question (I don't think it is). Thank you again.

let express = require("express"),
    app = express(),
    bodyParser = require("body-parser"),
    methodOV = require("method-override"),
    mongoose = require("mongoose"),
    passport = require("passport"),
    pL = require("passport-local"),
    pLM = require("passport-local-mongoose"),
    User = require("./user.js");

mongoose.connect("mongodb://localhost/max");

let maxBlog = new mongoose.Schema({
    title: String,
    author: String,
    content: String
});

let Blog = mongoose.model('Blog', maxBlog);

Blog.create({
    title: "Test",
    author: "Test",
    content: "Test"
});

app.use(express.static("public"));

app.use(bodyParser.urlencoded({ extended: false }))

app.use(bodyParser.json());

app.use(methodOV("_method"));

app.set('view engine', 'ejs');

//AUTH

app.use(passport.initialize());
app.use(passport.session());
passport.use(new pL(User.authenticate()));
passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());
app.use(require("express-session")({
    secret: "Rusty is the best and cutest dog in the world",
    resave: false,
    saveUninitialized: false
}));

app.get("/register",(req,res) => {
    res.render("register")
});

app.post("/register", (req, res) =>{
    User.register(new User({username: req.body.username}), req.body.password, (err, user) => {
        if(err){
            console.log(err);
            return res.render("register");
        }
        passport.authenticate("local")(req, res, function(){
           res.redirect("/");
        });
    });
});

// LOGIN ROUTES
app.get("/login", (req, res) =>{
   res.render("login"); 
});
//login logic
app.post("/login", passport.authenticate("local", {
    successRedirect: "/",
    failureRedirect: "/login"
}) ,(req, res) =>{
});

app.get("/logout", (req, res) => {
    req.logout();
    res.redirect("/");
});


const isLoggedIn = (req, res, next) =>{
    if(req.isAuthenticated()){
        return next();
    } else {
      res.redirect("/login");
    }
};

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

app.get("/", (req,res) => {
    res.redirect("/home");
});

app.get("/home", (req,res) => {
    res.render("index");
});

app.get("/blog", (req,res) => {
    Blog.find({},(err,blog) => {
        if (err){
            res.send("An unexpected error occured. Please try again later.");
        } else {
            res.render("blog",{blogs:blog});
        }
    });
});

app.post("/blog",isLoggedIn,(req,res) => {
    Blog.create({
        title: req.body.t,
        author: req.body.a,
        content: req.body.c
    }), (err,create) => {
        if (err){
            res.send("There was an error. Try again later.");
        } else {
            res.render("blogs");
        }
    };
});

app.get("/blogs/:id",(req,res) => {
    Blog.findById(req.params.id,(err,find) => {
        if (err){
            res.send("An error occured. Please try again later.");
        } else {
            res.render("show",{blog:find,isLoggedIn:isLoggedIn});
        }
    });
});

app.put("/blogs/:id/edit",isLoggedIn,(req,res) => {
    Blog.findByIdAndUpdate(req.params.id,({
        title: req.body.t,
        content: req.body.c,
        author: req.body.a
    }),(err,update) => {
        if (err){
            res.send("An error occured. Please try again later.");
        } else {
            res.redirect("/blogs"+req.params.id);
        }
    });
});

app.delete("/blogs/:id",isLoggedIn,(req,res) => {
    Blogs.findByIdAndRemove(req.params.id,(err,result) => {
        if(err){
            res.send("Sorry. There was an error please try again later.");
        } else {
            res.redirect("/blogs");
        }
    });
});

app.listen(8080);

Upvotes: 1

Views: 1766

Answers (1)

Amr Labib
Amr Labib

Reputation: 4083

You need to update 2 things:

1- consider adding session middleware before passport initialization

2- You need to set the maxAge of the session cookie

So replace this part:

app.use(passport.initialize());
app.use(passport.session());
passport.use(new pL(User.authenticate()));
passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());
app.use(require("express-session")({
    secret: "Rusty is the best and cutest dog in the world",
    resave: false,
    saveUninitialized: false
}));

with:

app.use(require("express-session")({
    secret: "Rusty is the best and cutest dog in the world",
    resave: false,
    saveUninitialized: false,
    cookie: {
        secure: false,
        maxAge: 3600000 //1 hour
    }
}));

app.use(passport.initialize());
app.use(passport.session());
passport.use(new pL(User.authenticate()));
passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());

Upvotes: 4

Related Questions