2017-10-13 135 views
-1

所有人。我一直有這個問題,當我登錄時,我無法登錄登錄。是的,我有快速會話模塊,並沒有錯誤的設置。當我嘗試做一些事情,需要你登錄時,我已經登錄,它只是帶我到登錄頁面(我已編程)。非常感謝您的幫助。對不起,如果這是一個愚蠢的問題(我不認爲這是)。再次感謝你。Node.JS護照不保持登錄狀態

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); 

回答

0

您需要更新兩件事情:

1-考慮護照初始化之前加入會議中間件

2 - 你需要設置會話cookie的MAXAGE

所以替換此部分:

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.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()); 
相關問題