2017-10-20 17 views
0

Lorsque je me connecte, je suis authentifié mais lorsque je passe à une autre page, req.isAuthenticated renvoie false et je suis sur le panneau de connexion. La deuxième chose est quand je me connecte, je continue à recevoir une erreur "ne peut pas définir les en-têtes après qu'ils sont envoyés". Voici mon code:Req.isAuthenticated devient faux

const isLoggedIn = (req, res, next) => { 
    if (req.isAuthenticated()) { 
    return res.end(); 
    } else { 
    return res.redirect("/login"); 
    } 
} 
module.exports = (app, passport) => { 
    app.post("/login", (req, res, next) => { 
    passport.authenticate("local-login", 
    (err, user, info) => { 
     if(!user) { 
      res.render("index", { message: "Wrong password or login!" }) 
     } else { 
      req.login(user, (error) => { 
      if (error) return next(error); 
      console.log("AUTH: ", req.isAuthenticated()) <--- RETURNS TRUE 
      return res.render("map", { name: user.name }); 
      }); 
     } 
     })(req, res, next); 
    }); 
    app.get("/", (req, res) => { 
    return res.render("index"); // load the index file 
    }) 
    app.get("/login", (req, res) => { 
    return res.render("index"); // load the index file 
    }) 
    app.get("/map", isLoggedIn, (req, res) => { 
    return res.render("map"); 
    }); 
    app.get("/vehicles", isLoggedIn, (req, res) => { 
    return 
    }); 
    app.get("/settings", isLoggedIn, (req, res) => { 
    res.render("settings"); 
    }); 
    app.get("/logout", (req, res) => { 
    req.logout(); 
    res.redirect("/"); 
    }); 
}; 

Répondre

0

Login sera bien sûr vous donner req.isAuthenticatedtrue parce que vous êtes juste authentifié par passport middleware.

Passeport retournera req.isAuthenticatedtrue jusqu'à ce que vous ne recevez pas déconnecté et il sera mis req.isAuthenticated false lorsque vous appuyez sur /logout itinéraire

donc maintenant l'état d'utilisateur, vous devez utiliser des sessions pour stocker l'état de l'application .

trouverez ci-dessous lien: https://www.npmjs.com/package/express-session

vous obtenez « ne peut pas mettre les en-têtes après leur envoi ». parce que vous renvoyez la réponse deux fois. celui qui est après req.isAuthenticated() devenant vrai et le second est comme vous êtes encore en train de rendre une page map.

donc au lieu de return res.end() vous devriez avoir à utiliser next()

const isLoggedIn = (req, res, next) => { 
    if (req.isAuthenticated()) { 
    req.session.isAuthenticated = true; 
    res.locals.isAuthenticated = true; 
    res.locals.user =req.user; 
    next(); //If you are authenticated, run the next 
    } else { 
    return res.redirect("/login"); 
    } 
} 
+0

Merci pour l'explication, mais n'a pas aidé. Après la connexion tout est ok, mais quand je clique sur par exemple map, mon req.session est comme reset – Miqez